;------------------------------------------------------------------------------- #unset enablehardware_test [MegaTune] MTversion = 2.25 queryCommand = "Q" signature = "speeduino 202405-dev" 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 = pressure_units, "Pressure Display" settingOption = DEFAULT, "PSI" settingOption = pressure_bar, "BAR" 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)" settingGroup = mcu, "Controller in use" settingOption = DEFAULT, "Arduino Mega 2560" settingOption = mcu_teensy, "Teensy" settingOption = mcu_stm32, "STM32" settingGroup = COMMS_COMPAT_GROUP, "Serial Mode" settingOption = COMMS_COMPAT, "Compatibility Mode" settingOption = DEFAULT, "Normal" settingGroup = COMMS_MSDROID_COMPAT, "msDroid Compatibility-ONLY enable on Android" settingOption = MSDROID_COMPAT, "Enable" settingOption = DEFAULT, "Disable" [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 batlow = scalar, U08, "Volts", .1, 0, 0, 25.5, 1 bathigh = scalar, U08, "Volts", .1, 0, 0, 25.5, 1 #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 ;These are used for padding out bits variables #define invalid_x8 = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define invalid_x16 = $invalid_x8, $invalid_x8 #define invalid_x24 = $invalid_x16, $invalid_x8 #define invalid_x32 = $invalid_x16, $invalid_x16 #define invalid_x64 = $invalid_x32, $invalid_x32 #define invalid_x128 = $invalid_x64, $invalid_x64 #define invalid_x256 = $invalid_x128, $invalid_x128 #define invalid_x512 = $invalid_x256, $invalid_x256 #define invalid_x1024 = $invalid_x512, $invalid_x512 #define invalid_x2048 = $invalid_x1024, $invalid_x1024 #define invalid_x4096 = $invalid_x2048, $invalid_x2048 #define invalid_x8192 = $invalid_x4096, $invalid_x4096 #define invalid_x16384 = $invalid_x8192, $invalid_x8192 #define invalid_x32768 = $invalid_x16384, $invalid_x16384 #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 = "== (equal)", "!= (different)", "> (greater)", ">= (greater/equal)", "< (smaller)", "<= (smaller/equal)", "& (and)", "^ (xor)" #define comp_IO_Pins_0 = "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 comp_IO_Pins_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" #define comp_IO_Pins_2 = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define comp_IO_Pins_3 = "Virtual", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", $invalid_x64, $invalid_x32, $invalid_x16, $invalid_x8 #define comp_IO_Pins = $comp_IO_Pins_0, $comp_IO_Pins_1, $comp_IO_Pins_2, $comp_IO_Pins_3 ;All definitions of split fullStatus should keep 32 options #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", "INVALID", "Advance", "TPS", "loopsPerSecond", "INVALID", "free RAM", "INVALID", "boostTarget/2", "Boost duty" #define fullStatus_def_2= "spark bits", "RPM DOT", "INVALID", "ethanolPct", "flexCorrection", "flexIgnCorrection", "idle Load", "testOutputs", "O2_2", "baro", "Aux in 0", "INVALID", "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" #define fullStatus_def_3= "Aux in 11", "INVALID", "Aux in 12", "INVALID", "Aux in 13", "INVALID", "Aux in 14", "INVALID", "Aux in 15", "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", "INVALID", "VVT1 Angle" #define fullStatus_def_4= "INVALID", "VVT1 Target", "VVT1 duty", "flexBoostCorrection", "INVALID", "baro correction", "Current VE", "ASE Value", "vss", "INVALID", "Gear", "Fuel Pressure", "Oil Pressure", "WMI duty", "WMI empty", "VVT2 angle", "INVALID", "VVT2 target", "VVT2 duty", "outputs status", "Fuel temp", "Fuel temp correction", "Advance 1", "Advance 2", "SD status", "EMAP", "INVALID", "Fan duty", "airConStatus", "INVALID", "INVALID" #define fullStatus_def_5= "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define fullStatus_def_6= "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define fullStatus_def_7= "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;Rules start at index 240 #define fullStatus_def_8= "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "running seconds x10", "Rule 1", "Rule 2", "Rule 3", "Rule 4", "Rule 5", "Rule 6", "Rule 7", "Rule 8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define fullStatus_def = $fullStatus_def_1, $fullStatus_def_2, $fullStatus_def_3, $fullStatus_def_4, $fullStatus_def_5, $fullStatus_def_6, $fullStatus_def_7, $fullStatus_def_8 #define pinLayouts = "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", "BlitzboxBL49sp", "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_x128, $invalid_x64 boostTableLabels = bits, U08, [0:1], "Duty Cycle %", "kPa" boostByGearLabels = bits, U08, [0:1], "", "%", "Limit", "" 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 #define trigger_DRZ400 = 21 #define trigger_NGC = 22 #define trigger_VMAX = 23 #define trigger_renix = 24 #define trigger_Rover = 25 #define trigger_K6A = 26 [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 laid ; 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 synthesised 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 = 15 pageSize = 128, 288, 288, 128, 288, 128, 240, 384, 192, 192, 288, 192, 128, 288, 256 ; 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", "\$tsCanId\x0F" 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", "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", "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", "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", "d%2i" #if COMMS_COMPAT ;Comms compat mode uses a different burn command in order to slow down the EEPROM burn rate burnCommand = "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i", "B%2i" #else burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i" #endif #if mcu_stm32 blockingFactor = 121 #else blockingFactor = 251 ; Serial buffer is 257 bytes and there are 6 bytes of overhead (2 for the size and 4 for the CRC). Total payload is therefore 257-6=251. #endif #if COMMS_COMPAT blockingFactor = 121 #endif delayAfterPortOpen=1000 ;validateArrayBounds = true blockReadTimeout = 2000 tsWriteBlocks = on interWriteDelay = 10 ;Ignored when tsWriteBlocks is on pageActivationDelay = 10 restrictSquirtRelationship = false ;This requires TS 3.1 or above #if MSDROID_COMPAT ;Do nothing #else messageEnvelopeFormat = msEnvelope_1.0 ;New and testing only tableCrcCommand = "k\$tsCanId%2i%2o%2c" ;TS can only use this command in new mode #endif readSdCompressed = false ;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, $invalid_x32768, $invalid_x16384, $invalid_x8192, $invalid_x4096, $invalid_x2048, $invalid_x256 ;-------------------------------------------------- ;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, 419, 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], $pinLayouts 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 taeMinChange = scalar, U08, 21, "%", 0.5, 0, 0, 5.0, 1 maeMinChange = scalar, U08, 22, "kPa", 1.0, 0, 0, 10.0, 0 ; Display (Options for what the display is showing) 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" crkngAddCLTAdv= 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, 419, 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 iacCLminValue = scalar, U08, 61, "% / Steps", {idleRes}, 0.0, 0.0, {idleResMax}, 0 ; Minimum and maximum duty cycles when using closed loop idle iacCLmaxValue = scalar, U08, 62, "% / Steps", {idleRes}, 0.0, 0.0, {idleResMax}, 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" fanEnable = bits, U08, 70, [3:4], "Off", "On/Off", "PWM", "INVALID" 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, 419, 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, 419, 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" idleAdvDelay = bits, U08, 92, [3:7], "0.0", "0.5", "1.0", "1.5", "2.0", "2.5", "3.0", "3.5", "4.0", "4.5", "5.0", "5.5", "6.0", "6.5", "7.0", "7.5", "8.0", "8.5", "9.0", "9.5", "10.0", "10.5", "11.0", "11.5", "12.0", "12.5", "13.0", "13.5", "14.0", "14.5", "INVALID", "INVALID" idleAdvRPM = scalar, U08, 93, "rpm", 100, 0.0, 100, 25500, 0 idleAdvTPS = scalar, U08, 94, "%", 0.5, 0, 0, 100.0, 1 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, 419, 0 #endif ;VSS settings vssMode = bits, U08, 102, [0:1], "Off", "CAN/Serial/Analog", "Pulses per KM", "Pulses per mile" ;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) settings 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, "%", 0.5, 0, 0, 100.0, 1 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 mapSwitchPoint = scalar, U08, 125, "RPM", 100, 0.0, 0.0, 16320, 0 canBMWCluster = bits, U08, 126, [0:0], "Off", "On" canVAGCluster = bits, U08, 126, [1:1], "Off", "On" ;These are reserved for future use, in case of more CAN broadcasting features are added canWBO = bits, U08, 126, [2:3], "Off", "rusEFI WBO", "INVALID", "INVALID" vssAuxCh = bits, U08, 126, [4:7], "Aux0", "Aux1", "Aux2", "Aux3", "Aux4", "Aux5", "Aux6", "Aux7", "Aux8", "Aux9", "Aux10", "Aux11", "Aux12", "Aux13", "Aux14", "Aux15" decelAmount = scalar, U08, 127, "%", 1.0, 0.0, 0.0, 150.0, 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} ;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, 70.0, 0 rpmBins2 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0 mapBins1 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, {ignLoadRes}, 0.0, 0.0, {ignLoadMax}, {ignDecimalRes} ; 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, S08, 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", "DRZ400", "Chrysler NGC", "Yamaha Vmax 1990+", "Renix", "Rover MEMS", "K6A", "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", "Rover 5-3-2 cam", "Toyota 3 Tooth", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, "%", 0.5, 0.0, 0.0, 100.0, 1 ;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, 125.0, 0 #else iatRetBins = array, U08, 48, [ 6], "F", 1.8, 17.77, 32.00, 257.0, 0 ; No -40 degree offset here #endif iatRetRates = array, U08, 54, [ 6], "deg", 1.0, 0.0, 0.00, 30.0, 0 ;Deceleration Fuel Cut Off (DFCO) dfcoRPM = scalar, U08, 60, "RPM", 10.0, 0.0, 100, 2550, 0 dfcoHyster = scalar, U08, 61, "RPM", 2.0, 0.0, 100, 500.0, 0 dfcoTPSThresh= scalar, U08, 62, "%", 0.5, 0.0, 0, 100.0, 1 ;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 240 so that default values of 255 can be overwritten 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 vvt2CL0DutyAng = scalar, S16, 121, "deg", 1.0, 0.0, -360.0, 360.0, 0 ; * ( 2 bytes) vvt2PWMdir = bits, U08, 123, [0:0], "Advance", "Retard" inj4CylPairing = bits, U08, 123, [1:2], "1+3 & 2+4", "1+4 & 2+3", "INVALID", "INVALID" dwellErrCorrect = bits, U08, 123, [3:3], "Off", "On" unusedBits4_123 = bits, U08, 123, [4:7] ANGLEFILTER_VVT = scalar, U08, 124, "%", 1.0, 0.0, 0, 100, 0 FILTER_FLEX = scalar, U08, 125, "%", 1.0, 0.0, 0, 240, 0 #if CELSIUS vvtMinClt = scalar, U08, 126, "C", 1.0, -40, -40, 215, 0 #else vvtMinClt = scalar, U08, 126, "F", 1.8, -22.23, -40, 419, 0 #endif vvtDelay = scalar, U08, 127, "S", 5.0, 0.0, 0, 1275, 0 ;-------------------------------------------------- ;Start AFR page ;-------------------------------------------------- page = 5 lambdaTable = array, U08, 0, [16x16], "Lambda", { 0.1 / stoich }, 0.0000, 0.00, 2.00, 3 afrTable = array, U08, lastOffset, [16x16], "AFR", 0.1, 0.0, 7, 25.5, 1 rpmBinsAFR = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0 loadBinsAFR = array, U08, 272,[ 16], { bitStringValue(algorithmUnits , algorithm) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} ;-------------------------------------------------- ;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, 419.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_afr = scalar, U08, 8, "AFR", 0.1 , 0, 7 , 25 , 1 ego_min_lambda = scalar, U08, lastOffset, "Lambda", {0.1 / stoich}, 0, {7 / stoich}, {25 / stoich}, 3 ego_max_afr = scalar, U08, 9, "AFR", 0.1 , 0, 7 , 25 , 1 ego_max_lambda = scalar, U08, lastOffset, "Lambda", {0.1 / stoich}, 0, {7 / stoich}, {25 / stoich}, 3 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, "%", 0.5, 0, 0, 100.0, 1 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" tachoMode = bits, U08, 14, [6:6], "Fixed Duration", "Match Dwell" 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, 419, 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, S08, 62, "deg", 1.0, 0.0,-30.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, 419, 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, 419, 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", "Stepper Closed+Open loop" 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, 419, 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 variables fanInv = bits, U08, 120, [0:0], "No", "Yes" fanUnused = 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, 419.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, 419, 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", 0.5, 0.0, 0.0, 127.0, 1 vvtTable = array, U08, 80,[8x8], "%", 0.5, 0.0, 0, 100, 1 rpmBinsVVT = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0 loadBinsVVT = array, U08, 152,[ 8], { bitStringValue(algorithmUnits , vvtLoadSource) }, {vvtLoadRes}, 0.0, 0.0, {vvtLoadMax}, {vvtDecimalRes} ;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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} ;-------------------------------------------------- ;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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} 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) }, {fuelLoadRes}, 0.0, 0.0, {fuelLoadMax}, {fuelDecimalRes} ;-------------------------------------------------- ;CANBUS control and Axillary 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" secondarySerialProtocol = bits, U08, 0, [3:6], "Generic (Fixed List)". "Generic (ini File)". "CAN", "msDroid", "Real Dash", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" 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:15], $CAN_ADDRESS_HEX caninput_source_can_address1 = bits, U16, 19, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address2 = bits, U16, 21, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address3 = bits, U16, 23, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address4 = bits, U16, 25, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address5 = bits, U16, 27, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address6 = bits, U16, 29, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address7 = bits, U16, 31, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address8 = bits, U16, 33, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address9 = bits, U16, 35, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address10 = bits, U16, 37, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address11 = bits, U16, 39, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address12 = bits, U16, 41, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address13 = bits, U16, 43, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address14 = bits, U16, 45, [0:15], $CAN_ADDRESS_HEX caninput_source_can_address15 = bits, U16, 47, [0:15], $CAN_ADDRESS_HEX caninput_source_start_byte0 = scalar, U08, 49, "", 1, 0, 0, 7, 0 caninput_source_start_byte1 = scalar, U08, 50, "", 1, 0, 0, 7, 0 caninput_source_start_byte2 = scalar, U08, 51, "", 1, 0, 0, 7, 0 caninput_source_start_byte3 = scalar, U08, 52, "", 1, 0, 0, 7, 0 caninput_source_start_byte4 = scalar, U08, 53, "", 1, 0, 0, 7, 0 caninput_source_start_byte5 = scalar, U08, 54, "", 1, 0, 0, 7, 0 caninput_source_start_byte6 = scalar, U08, 55, "", 1, 0, 0, 7, 0 caninput_source_start_byte7 = scalar, U08, 56, "", 1, 0, 0, 7, 0 caninput_source_start_byte8 = scalar, U08, 57, "", 1, 0, 0, 7, 0 caninput_source_start_byte9 = scalar, U08, 58, "", 1, 0, 0, 7, 0 caninput_source_start_byte10 = scalar, U08, 59, "", 1, 0, 0, 7, 0 caninput_source_start_byte11 = scalar, U08, 60, "", 1, 0, 0, 7, 0 caninput_source_start_byte12 = scalar, U08, 61, "", 1, 0, 0, 7, 0 caninput_source_start_byte13 = scalar, U08, 62, "", 1, 0, 0, 7, 0 caninput_source_start_byte14 = scalar, U08, 63, "", 1, 0, 0, 7, 0 caninput_source_start_byte15 = scalar, U08, 64, "", 1, 0, 0, 7, 0 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" caninputEndianess = bits, U08, 67, [0:0], "Big-Endian", "Little-Endian" 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 egoMAPMax = scalar, U08, 112, "kPa", 2.0, 0.0, 2.0, 511.0, 0 egoMAPMin = scalar, U08, 113, "kPa", 2.0, 0.0, 2.0, 511.0, 0 speeduino_tsCanId = bits, U08, 114, [0:3], $tsCanId_list true_address = bits, U16, 115, [0:15], $CAN_ADDRESS_HEX realtime_base_address = bits, U16, 117, [0:15], $CAN_ADDRESS_HEX obd_address = bits, U16, 119, [0:15], $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" boostByGearEnabled = bits, U08, 153, [4:5], "Off", "Multiplied %", "Constant limit", "INVALID" blankfield = bits, U08, 153, [6:6], "","" iacStepperPower = bits, U08, 153, [7:7], "When Active", "Always" iacMaxSteps = scalar, U08, 154, "Steps", 3, 0, 0, {iacStepHome-3}, 0 idleAdvStartDelay = scalar, U08, 155, "S", 0.1, 0.0, 0.0, 25.5, 1 boostByGear1 = scalar, U08, 156, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 boostByGear2 = scalar, U08, 157, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 boostByGear3 = scalar, U08, 158, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 boostByGear4 = scalar, U08, 159, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 boostByGear5 = scalar, U08, 160, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 boostByGear6 = scalar, U08, 161, { bitStringValue(boostByGearLabels , boostByGearEnabled) }, 2.0, 0.0, 0.0, {boostTableLimit}, 0 PWMFanDuty = array, U08, 162, [4], "%", 0.5, 0, 0, 100, 1 hardRevMode = bits, U08, 166, [0:1], "Off", "Fixed", "Coolant based", "INVALID" coolantProtRPM = array, U08, 167, [6], "RPM", 100.0, 0.0, 100.0, 25500, 0 #if CELSIUS coolantProtTemp = array, U08, 173, [6], "C", 1.0, -40, -40, 215, 0 #else coolantProtTemp = array, U08, 173, [6], "F", 1.8, -22.23, -40, 419, 0 #endif unused10_179 = scalar, U08, 179, "", 1, 0, 0, 255, 0 dfcoTaperTime = scalar, U08, 180, "S", 0.1, 0.0, 0.0, 25.5, 1 dfcoTaperFuel = scalar, U08, 181, "%", 1.0, 0.0, 0, 255, 0 dfcoTaperAdvance = scalar, U08, 182, "deg", 1.0, 0.0, 0, 40, 0 dfcoTaperEnable = bits, U08, 183, [0:0], "Off", "On" unused10_182 = bits, U08, 183, [1:7], "" unused10_184 = scalar, U08, 184, "", 1, 0, 0, 255, 0 ; AFR engine protection afrProtectEnabled = bits, U08, 185, [0:1], "Off", "Fixed mode", "Table mode", "INVALID" afrProtectMAP = scalar, U08, 186, "kPa", 2.0, 0.0, 0.0, 511.0, 0 ; 8 bit value, 1 byte afrProtectRPM = scalar, U08, 187, "RPM", 100, 0.0, 100, 25500, 0 ; 8 bit value, 1 byte afrProtectTPS = scalar, U08, 188, "%", 0.5, 0.0, 0.0, 100.0, 1 ; 8 bit value, 1 byte afrProtectDeviationLambda = scalar, U08, 189, "Lambda", {0.1 / stoich}, 0.0, 0.00, 25.5, 3 ; 8 bit value, 1 byte afrProtectDeviation = scalar, U08, lastOffset, "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; 8 bit value, 1 byte afrProtectCutTime = scalar, U08, 190, "seconds", 0.1, 0.0, 0.0, 2.5, 1 ; 8 bit value, 1 byte afrProtectReactivationTPS = scalar, U08, 191, "%", 0.5, 0.0, 0.0, 100.0, 1 ; 8 bit value, 1 byte 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, 419, 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 , ignAlgorithm) }, {ignLoadRes}, 0.0, 0.0, {ignLoadMax}, {ignDecimalRes} 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", 0.5, 0, 0, 100.0, 1 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, 419, 0 #endif n2o_maxMAP = scalar, U08, 77, "kPa", 2.0, 0.0, 0.0, 511.0, 0 n2o_minTPS = scalar, U08, 78, "%TPS", 0.5, 0.0, 0.0, 100.0, 1 n2o_maxAFR = scalar, U08, 79, "AFR", 0.1 , 0, 0, 25.5 , 1 n2o_maxLambda = scalar, U08, lastOffset, "Lambda", {0.1 / stoich}, 0, 0, {25.5 / stoich}, 3 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, 40.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, 40.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) }, {(fuel2SwitchVariable == 2) ? 0.5 : 1.0}, 0.0, 0.0, 9000, {(fuel2SwitchVariable == 2) ? 1 : 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, "%", 0.5, 0.0, 0.0, 100.0, 1 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) vvtCL0DutyAng = scalar, S16, 130, "deg", 1.0, 0.0, -360.0, 360.0, 0 ; * ( 2 bytes) vvtCLMinAng = scalar, U08, 132, "deg", 0.5, 0.0, 0.0, 100.0, 0 ; * ( 1 byte) vvtCLMaxAng = scalar, U08, 133, "deg", 0.5, 0.0, 0.0, 100.0, 0 ; * ( 1 byte) 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" oilPressurePin = bits, U08, 135, [3:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", "A19", "A20", "A21", "A22", INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID fuelPressurePin = bits, U08, 136, [0:4], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", "A19", "A20", "A21", "A22", INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID #if pressure_bar fuelPressureMin = scalar, S08, 137, "BAR", 0.0698, 0.0, -7.0, 8.9, 2 ;Note signed int fuelPressureMax = scalar, U08, 138, "BAR", 0.0698, 0.0, 0.0, 17.8, 2 oilPressureMin = scalar, S08, 139, "BAR", 0.0698, 0.0, -7.0, 8.9, 2 ;Note signed int oilPressureMax = scalar, U08, 140, "BAR", 0.0698, 0.0, 0.0, 17.8, 2 oilPressureProtMins = array, U08, 145, [ 4], "BAR", 0.0698, 0.0, 0.0, 17.8, 2 #else 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 oilPressureProtMins = array, U08, 145, [ 4], "psi", 1.0, 0.0, 0.0, 255, 0 #endif oilPressureProtRPM = array, U08, 141, [ 4], "RPM", 100.0, 0.0, 100.0, 25500, 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", 0.5, 0.0, 0.0, 100.0, 1 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, 419, 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, 40.0, 0 vvtCLminDuty = scalar, U08, 171, "%", 0.5, 0.0, 0.0, 100.0, 1 ; Minimum and maximum duty cycles when using closed loop vvtCLmaxDuty = scalar, U08, 172, "%", 0.5, 0.0, 0.0, 100.0, 1 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" vvt2Enabled = bits, U08, 173, [6:6], "Off", "On" TrigEdgeThrd = bits, U08, 173, [7:7], "RISING", "FALLING" ;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, 419, 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) }, {(spark2SwitchVariable == 2) ? 0.5 : 1.0}, 0.0, 0.0, 9000, {(spark2SwitchVariable == 2) ? 1 : 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" oilPressureProtTime = scalar, U08, 190, "seconds", 0.1, 0.0, 0.0, 25, 1 unused11_190_191 = array, U08, 191, [1], "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) }, {fuel2LoadRes}, 0.0, 0.0, { fuel2LoadMax }, {fuel2DecimalRes} ;-------------------------------------------------- ;Water methanol injection and vvt2 maps (Page 12) ;-------------------------------------------------- page = 12 wmiTable = array, U08, 0,[8x8], "%",{wmiLoadRes}, 0.0, 0.0, {wmiLoadMax}, 1 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 vvt2Table = array, U08, 80,[8x8], "%", 0.5, 0.0, 0, 100, 1 rpmBinsVVT2 = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0 loadBinsVVT2 = array, U08, 152,[ 8], { bitStringValue(algorithmUnits , vvtLoadSource) }, {vvtLoadRes}, 0.0, 0.0, {vvtLoadMax}, {vvtDecimalRes} 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 loadBinsDwell = array, U08, 180,[ 4], { bitStringValue(algorithmUnits , ignAlgorithm) }, {ignLoadRes}, 0.0, 0.0, {ignLoadMax}, {ignDecimalRes} ;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" kindOfLimiting0 = bits, U08, 1, [0:0], "Minimum", "Maximum" kindOfLimiting1 = bits, U08, 1, [1:1], "Minimum", "Maximum" kindOfLimiting2 = bits, U08, 1, [2:2], "Minimum", "Maximum" kindOfLimiting3 = bits, U08, 1, [3:3], "Minimum", "Maximum" kindOfLimiting4 = bits, U08, 1, [4:4], "Minimum", "Maximum" kindOfLimiting5 = bits, U08, 1, [5:5], "Minimum", "Maximum" kindOfLimiting6 = bits, U08, 1, [6:6], "Minimum", "Maximum" kindOfLimiting7 = bits, U08, 1, [7:7], "Minimum", "Maximum" 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, 255.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, 255.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 outputTimeLimit = array, U08, 34, [ 8], "S", 0.1, 0.0, 0.0, 25.5, 1 unused13_35_49 = array, U08, 42, [ 8], "%", 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_115= array, U08, 106, [ 10], "%", 1.0, 0.0, 0.0, 255, 0 ;RTC and onboard logging stuff onboard_log_csv_separator = bits, U08, 116, [0:1], ";", ",", "tab", "space" onboard_log_file_style = bits, U08, 116, [2:3], "Disabled", "CSV", "INVALID", "INVALID" ;Future maybe more file types. onboard_log_file_rate = bits, U08, 116, [4:5], "1Hz", "4Hz", "10Hz", "30Hz" onboard_log_filenaming = bits, U08, 116, [6:7], "Overwrite", "Date-time", "Sequential", "INVALID" onboard_log_storage = bits, U08, 117, [0:1], "sd-card", "INVALID", "INVALID", "INVALID" ;In the future maybe an onboard spi flash can be used, or switch between SDIO vs SPI sd card interfaces. onboard_log_trigger_boot = bits, U08, 117, [2:2], "Disabled", "On boot" onboard_log_trigger_RPM = bits, U08, 117, [3:3], "Disabled", "Enabled" onboard_log_trigger_prot = bits, U08, 117, [4:4], "Disabled", "Enabled" onboard_log_trigger_Vbat = bits, U08, 117, [5:5], "Disabled", "Enabled" onboard_log_trigger_Epin = bits, U08, 117, [6:7], "Disabled", "Enabled", "INVALID", "INVALID" ;In future add momentary on/off option onboard_log_tr1_duration = scalar, U16, 118, "s", 1.000, 0.0, 0, 65000, 0 onboard_log_tr2_thr_on = scalar, U08, 120, "RPM", 100.0, 0.0, 0, 10000, 0 onboard_log_tr2_thr_off = scalar, U08, 121, "RPM", 100.0, 0.0, 0, 10000, 0 onboard_log_tr3_thr_RPM = bits, U08, 122, [0:0], "Disabled", "Enabled" onboard_log_tr3_thr_MAP = bits, U08, 122, [1:1], "Disabled", "Enabled" onboard_log_tr3_thr_Oil = bits, U08, 122, [2:2], "Disabled", "Enabled" onboard_log_tr3_thr_AFR = bits, U08, 122, [3:3], "Disabled", "Enabled" onboard_log_tr4_thr_on = scalar, U08, 123, "V", 0.1, 0.0, 0.0, 15.90, 2 ; * ( 1 byte) onboard_log_tr4_thr_off = scalar, U08, 124, "V", 0.1, 0.0, 0.0, 14.90, 2 ; * ( 1 byte) onboard_log_tr5_Epin_pin = bits , U08, 125, [0:5], $IO_Pins_no_def unused13_125_2 = bits , U08, 125, [6:7], ";", ",", "tab", "space" hwTestIgnDuration = scalar, U08, 126, "ms", 1.0, 0.0, 0.0, 10, 0 hwTestInjDuration = scalar, U08, 127, "ms", 1.0, 0.0, 0.0, 20, 0 ;-------------------------------------------------- ;Second ignition map (Page 14) ;-------------------------------------------------- page = 14 advTable2 = array, U08, 0,[16x16], "deg", 1.0, -40, { ign2ValuesMin }, { ign2ValuesMax }, 0 rpmBins3 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0 mapBins2 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , spark2Algorithm) }, {ign2LoadRes}, 0.0, 0.0, { ign2LoadMax }, {ign2DecimalRes} ; 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 :( ;------------------------------------------------------------------------------- ;-------------------------------------------------- ;boost Duty lookup map (Page 15) ;-------------------------------------------------- page = 15 ;boost Duty lookup table boostTableDutyLookup = array, U08, 0, [8x8], "Duty Cycle %", 0.5, 0.0, 0, 100, 0 rpmBinsDutyLookup = array, U08, 64, [ 8], "RPM", 100.0, 0.0, 100, 25500, 0 loadBinsDutyLookup = array, U08, 72, [ 8], "kpa", 2.0, 0.0, 0.0, {fuelLoadMax}, 0 ;add variables for improved closedloop boost control boostControlEnable = bits, U08, 80, [0:0], "Baro", "Fixed" unused15_1_1 = bits, U08, 80, [1:3], "False", "INVALID","INVALID", "INVALID","INVALID", "INVALID","INVALID", "INVALID" unused15_1_2 = bits, U08, 80, [4:6], "False", "INVALID","INVALID", "INVALID","INVALID", "INVALID","INVALID", "INVALID" unused15_1_3 = bits, U08, 80, [7:7], "False", "INVALID" boostDCWhenDisabled = scalar, U08, 81, "%", 1, 0, 0, 100, 0 boostControlEnableThreshold = scalar, U08, 82, "kpa", 1, 0.0, 0.0, 255, 0 ; Air conditioning control airConEnable = bits, U08, 83, [0:0], "Off", "On" airConCompPol = bits, U08, 83, [1:1], "Normal", "Inverted" airConReqPol = bits, U08, 83, [2:2], "Normal", "Inverted" airConTurnsFanOn = bits, U08, 83, [3:3], "No", "Yes" airConFanEnabled = bits, U08, 83, [4:4], "Disabled", "Enabled" airConFanPol = bits, U08, 83, [5:5], "Normal", "Inverted" airConUnused1 = bits, U08, 83, [6:7], "0", "1", "2", "3" airConCompPin = bits, U08, 84, [0:5], "Unused", "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" airConUnused2 = bits, U08, 84, [6:7], "0", "1", "2", "3" airConReqPin = bits, U08, 85, [0:5], "Unused", "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" airConUnused3 = bits, U08, 85, [6:7], "0", "1", "2", "3" airConTPSCut = scalar, U08, 86, "%", 0.5, 0.0, 0.0, 100.0, 1 airConMinRPM = scalar, U08, 87, "RPM", 10, 0.0, 0.0, 2550, 0 airConMaxRPM = scalar, U08, 88, "RPM", 100, 0.0, 0.0, 25500, 0 #if CELSIUS airConClTempCut = scalar, U08, 89, "C", 1.0, -40, -40, 215, 0 #else airConClTempCut = scalar, U08, 89, "F", 1.8, -22.23, -40, 419, 0 #endif airConIdleSteps = scalar, U08, 90, "%/Steps", 1.0, 0.0, 0.0, 255, 0 airConTPSCutTime = scalar, U08, 91, "s", 0.1, 0.0, 0.0, 25.5, 1 airConCompOnDelay = scalar, U08, 92, "s", 0.1, 0.0, 0.0, 25.5, 1 airConAfterStartDelay = scalar, U08, 93, "s", 0.1, 0.0, 0.0, 25.5, 1 airConRPMCutTime = scalar, U08, 94, "s", 0.1, 0.0, 0.0, 25.5, 1 airConFanPin = bits, U08, 95, [0:5], "Unused", "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" airConUnused4 = bits, U08, 95, [6:7], "0", "1", "2", "3" airConIdleUpRPMAdder = scalar, U08, 96, "Added Target RPM", 10.0, 0.0, 0.0, 250.0, 0 airConPwmFanMinDuty = scalar, U08, 97, "%", 0.5, 0.0, 0.0, 100.0, 1 rollingProtRPMDelta = array, S08, 98, [4], "RPM", 10.0, 0, -1000, 0, 0 rollingProtCutPercent = array, U08, 102, [4], "%", 1.0, 0, 0, 100, 0 Unused15_106_255 = array, U08, 106, [150], "%", 1.0, 0.0, 0.0, 255, 0 ;------------------------------------------------------------------------------- [EventTriggers] triggeredPageRefresh = 1, { vssRefresh > 0 } [ConstantsExtensions] requiresPowerCycle = nCylinders requiresPowerCycle = pinLayout requiresPowerCycle = injLayout requiresPowerCycle = inj4CylPairing requiresPowerCycle = twoStroke requiresPowerCycle = engineType requiresPowerCycle = alternate requiresPowerCycle = fanPin requiresPowerCycle = reqFuel requiresPowerCycle = TrigEdge requiresPowerCycle = TrigEdgeSec requiresPowerCycle = numTeeth requiresPowerCycle = missingTeeth requiresPowerCycle = trigPatternSec requiresPowerCycle = injOpen requiresPowerCycle = IgInv requiresPowerCycle = ignBypassEnable 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 = vssPin requiresPowerCycle = oddfire2 requiresPowerCycle = oddfire3 requiresPowerCycle = oddfire4 requiresPowerCycle = iacCLminValue requiresPowerCycle = iacCLmaxValue 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 requiresPowerCycle = airConEnable requiresPowerCycle = airConCompPin requiresPowerCycle = airConReqPin requiresPowerCycle = airConFanPin requiresPowerCycle = airConReqPol requiresPowerCycle = airConCompPol requiresPowerCycle = airConFanPol requiresPowerCycle = airConFanEnabled requiresPowerCycle = fuelPressureEnable requiresPowerCycle = oilPressureEnable requiresPowerCycle = fuelPressurePin requiresPowerCycle = oilPressurePin 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 = mapSwitchPoint, 0 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 = iacFastTemp, 0 defaultValue = idleFreq, 160 defaultValue = iacStepHome, 99 defaultValue = iacStepHyster, 3 defaultValue = iacMaxSteps, 96 defaultValue = iacCLminValue,0 defaultValue = iacCLmaxValue,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 = stagingEnabled, 0 defaultValue = lnchCtrlTPS, 0 defaultValue = resetControl, 0 defaultValue = bootloaderCaps, 0 defaultValue = aeTaperMin, 1000 defaultValue = aeTaperMax, 5000 defaultValue = taeMinChange, 2 defaultValue = maeMinChange, 2 defaultValue = aeColdPct, 100 defaultValue = aeColdTaperMin, 0 defaultValue = aeColdTaperMax, 60 defaultValue = decelAmount, 100 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 = idleTaperTime, 1.0 defaultValue = dfcoDelay, 0.1 defaultValue = dfcoRPM, 1500 defaultValue = dfcoHyster, 200 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 defaultValue = vvtCL0DutyAng, 0 defaultValue = vvt2CL0DutyAng, 0 defaultValue = ANGLEFILTER_VVT, 0 defaultValue = idleAdvStartDelay, 0.2 ;0.2S for a quick gear change without change the table advance defaultValue = boostByGearEnabled, 0 defaultValue = airConIdleUpRPMAdder, 100 defaultValue = airConPwmFanMinDuty, 80 #if CELSIUS defaultValue = vvtMinClt, 70 defaultValue = fuelTempBins, 0 15 30 45 60 75 defaultValue = dfcoMinCLT, 70 #else defaultValue = vvtMinClt, 160 defaultValue = fuelTempBins, 32 59 86 113 140 157 defaultValue = dfcoMinCLT, 158 #endif defaultValue = vvtDelay, 60 defaultValue = fuelTempValues, 100 100 100 100 100 100 ; AFR protection default values defaultValue = afrProtectEnabled, 0 defaultValue = afrProtectMAP, 180 defaultValue = afrProtectRPM, 4000 defaultValue = afrProtectTPS, 80 defaultValue = afrProtectDeviationLambda, 0.10 defaultValue = afrProtectDeviation, 1.47 defaultValue = afrProtectCutTime, 0.8 defaultValue = afrProtectReactivationTPS, 20 ;Default pins defaultValue = fanPin, 0 defaultValue = vvt1Pin, 0 defaultValue = vvt2Pin, 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 = dwellErrCorrect, 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 defaultValue = FILTER_FLEX, 75 ; AirCon Default Values defaultValue = airConEnable, 0 defaultValue = airConCompPol, 0 defaultValue = airConReqPol, 0 defaultValue = airConTurnsFanOn, 1 defaultValue = airConCompPin, 0 defaultValue = airConReqPin, 0 defaultValue = airConFanPin, 0 defaultValue = airConFanPol, 0 defaultValue = airConFanEnabled, 0 defaultValue = airConTPSCut, 65 defaultValue = airConMinRPM, 500 defaultValue = airConMaxRPM, 4700 defaultValue = airConClTempCut, 120 defaultValue = airConIdleSteps, 0 defaultValue = airConTPSCutTime, 5.00 defaultValue = airConCompOnDelay, 0.4 defaultValue = airConAfterStartDelay, 5.00 defaultValue = airConRPMCutTime, 5.00 ;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 ;SD / RTC related defaultValue = rtc_mode, 0 defaultValue = onboard_log_file_rate, 4 defaultValue = onboard_log_filenaming, 0 defaultValue = onboard_log_storage, 0 defaultValue = onboard_log_trigger_boot, 0 defaultValue = onboard_log_trigger_RPM, 0 defaultValue = onboard_log_trigger_prot, 0 defaultValue = onboard_log_trigger_Vbat, 0 defaultValue = onboard_log_trigger_Epin, 0 defaultValue = onboard_log_tr1_duration, 60 defaultValue = onboard_log_tr2_thr_on, 600 defaultValue = onboard_log_tr2_thr_off,400 defaultValue = onboard_log_tr3_thr_RPM, 0 defaultValue = onboard_log_tr3_thr_MAP, 0 defaultValue = onboard_log_tr3_thr_Oil, 0 defaultValue = onboard_log_tr3_thr_AFR, 0 defaultValue = onboard_log_tr4_thr_on, 12.5 defaultValue = onboard_log_tr4_thr_off, 7.0 defaultValue = onboard_log_tr5_Epin_pin, 0 defaultValue = onboard_log_csv_separator, 0 ;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 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 1 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 = hwTestInjDuration, 8 defaultValue = hwTestIgnDuration, 4 defaultValue = rpmwarn, 3000 defaultValue = rpmdang, 5000 defaultValue = rpmhigh, 8000 defaultValue = mapwarn, 200 defaultValue = mapdang, 245 defaultValue = maphigh, 255 defaultValue = batlow, 11.8 defaultValue = bathigh, 15 defaultValue = rollingProtRPMDelta, -300 -200 -100 -50 defaultValue = rollingProtCutPercent, 50 65 80 95 defaultValue = egoMAPMax, 100 defaultValue = egoMAPMin, 26 #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 groupMenu = "Engine Protection" groupChildMenu = engineProtection, "Common Engine Protection" groupChildMenu = revLimiterDialog, "Rev Limiters", { engineProtectType } groupChildMenu = boostCut, "Boost Cut", { engineProtectType } groupChildMenu = oilPressureProtection, "Oil Pressure", { engineProtectType } groupChildMenu = afrProtect, "AFR Protection", { engineProtectType } subMenu = flexFuel, "Flex Fuel", 2 subMenu = veTableDialog, "VE Table", 0 subMenu = sparkTbl, "Spark Table", 2 subMenu = afrTable1Tbl, "AFR Target Table", 5 subMenu = lambdaTable1Tbl, "Lambda Target 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 || iacAlgorithm == 7 || 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 || iacAlgorithm == 7 } subMenu = iacStepCrank_curve, "Idle - Stepper Motor Cranking", 7, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } subMenu = std_separator subMenu = idleUpSettings, "Idle Up Settings", { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } subMenu = std_separator subMenu = idleAdvanceSettings, "Idle Advance Settings" menu = "&Accessories" subMenu = fanSettings, "Thermo Fan" subMenu = pwmFan, "PWM Fan Curve", { fanEnable == 2 } subMenu = LaunchControl, "Launch Control / Flat Shift" subMenu = fuelpump, "Fuel Pump" subMenu = NitrousControl, "Nitrous" subMenu = vssSettings, "VSS and Gear detection" subMenu = airCon, "Air Conditioning Control" subMenu = pressureSensors, "Fuel/Oil pressure" subMenu = std_separator subMenu = boostSettings, "Boost Control" subMenu = boostLoad, "Boost Targets/Duty", 8, { boostEnabled } subMenu = std_separator subMenu = vvtSettings, "VVT Control" subMenu = vvtTbl, "VVT Target/Duty", 8, { vvtEnabled } subMenu = vvt2Tbl, "VVT2 Target/Duty", 8, { vvtEnabled && vvt2Enabled } subMenu = std_separator subMenu = wmiSettings, "WMI Control", { !vvt2Enabled } subMenu = wmiTbl, "WMI duty cycle", 8, { !vvt2Enabled && wmiEnabled && wmiMode > 1 } subMenu = std_separator subMenu = tacho, "Tacho Output" subMenu = std_separator subMenu = can_serial3IO, "Canbus/Secondary Serial IO Interface" subMenu = CanBcast, "CAN Broadcasting menu", { CANisAvailable } subMenu = std_separator subMenu = Canin_config, "External Auxillary Input Channel Configuration", {enable_secondarySerial || CANisAvailable } subMenu = Auxin_config, "Local Auxillary Input Channel Configuration" ;subMenu = std_separator ;subMenu = Canout_config, "Canbus Output Configuration" 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" #if mcu_teensy subMenu = std_ms3SdConsole, "Browse / Import SD Card" subMenu = rtc_settings, "Setup realtime clock" subMenu = onboard_log_setup, "Setup onboard logger / SD" #else subMenu = std_ms3SdConsole, "Browse / Import SD Card", { arrayValue( array.boardHasRTC, pinLayout ) > 0 } subMenu = rtc_settings, "Setup realtime clock", { arrayValue( array.boardHasRTC, pinLayout ) > 0 } subMenu = onboard_log_setup, "Setup onboard logger / SD", { arrayValue( array.boardHasRTC, pinLayout ) > 0 } #endif menuDialog = main menu = "3D &Tuning Maps" subMenu = veTable1Map, "Fuel Table" subMenu = sparkMap, "Spark Table", 3 subMenu = afrTable1Map, "AFR Target Table" subMenu = lambdaTable1Map,"Lambda Target Table" subMenu = fuel2Map, "Fuel Table 2", { fuel2Mode } subMenu = spark2Map, "Spark Table 2", { spark2Mode } subMenu = dwell_tblMap "Dwell Map", { useDwellMap } subMenu = stagingMap "Fuel Staging", { stagingMode == 0 } subMenu = boostMap, "Boost Duty / Target", { boostEnabled } subMenu = boostDutyLookup "Boost Base Duty Closed Loop", { boostType == 1 } subMenu = vvtMap "VVT Control", { vvtEnabled } subMenu = vvt2Map "VVT 2 Control", { vvtEnabled && vvt2Enabled } subMenu = wmiMapMap "WMI Control", { !vvtEnabled && wmiEnabled && wmiMode > 1 } #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" mapSwitchPoint = "Below this RPM instantaneous map sample method is used, instead of selected one.\nSet 0 RPM to disable (Default)" 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. " inj4CylPairing = "Which outputs will be paired when semi-sequential fuel injection is used (4 cylinder engines). Pairing depends on firing order" 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." PollLevelPol = "The level of the cam trigger input will be checked at tooth #1 and this defines if the level is supposed to be High or Low at 1st phase of the engine." 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 * ) / 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. If using a VR sensor select Rising for MAX9926 or LM based and Falling for DSC VR Conditioners.\nLeading.\nTrailing." TrigEdgeSec = "The Trigger edge of the secondary (Cam) sensor. If using a VR sensor select Rising for MAX9926 or LM based and Falling for DSC VR Conditioners.\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 overridden by the fixed cranking value when cranking" FixAng = "Timing will be locked at this value if the above is enabled" perToothIgn = "This ignition mode works by adjusting in progress ignition events each time a new RPM trigger pulse is received. This can improve timing accuracy significantly where supported." dwellErrCorrect = "A basic closed loop adjustment will be made to the dwell time to account for variations due to accel/decel. This is generally only needed on lower resolution trigger arrangements" 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 necessarily the same as the connector pin on any particular board" fanSP = "The trigger temperature for the fan. Fan will be enabled above this temp" airConEnable = "Whether we are doing A/C control" airConCompPol = "Normal should be used in most cases - where a logic HIGH output turns on the output power transistor, which is the ON state. Inverted makes logic LOW the ON state, in the rare case that turning off the transistor turns the compressor on, or you are using some sort of depletion mode FET." airConReqPol = "Normal should be used in most cases - where the A/C button provides a ground when pressed. Inverted removes the internal pullup resistor, and makes +5V the ON signal instead of ground." airConTurnsFanOn = "Whether the cooling fan turns on when the A/C compressor is running." airConCompPin = "The Arduino pin that the A/C request compressor signal is output on. This is NOT necesarrily the same as the connector pin on any particlar board." airConReqPin = "The Arduino pin that the A/C request control signal is input on. This is NOT necesarrily the same as the connector pin on any particlar board." airConFanPin = "The Arduino pin that the A/C fan control signal is output on (if enabled). This is only needed if you have a stand-alone A/C fan, separate to the cooling fan (which can be enabled to come on with the A/C compressor). This is NOT necesarrily the same as the connector pin on any particlar board." airConFanPol = "Normal should be used in most cases - where a logic HIGH output turns on the output power transistor, which is the ON state. Inverted makes logic LOW the ON state, in the rare case that turning off the transistor turns the fan on, or you are using some sort of depletion mode FET." airConFanEnabled = "Enable/disable stand-alone A/C fan. This would be a separate fan that only comes on when the A/C compressor is engaged, and should not be needed if the main cooling fan comes on with the A/C." airConTPSCut = "The TPS position at which the air compressor will be locked out and turn off. When TPS falls below this level (minus a 5% hysteresis), the A/C compressor will kick back in after the delay period (TPS Cut Time), provided the A/C request signal is still present." airConMinRPM = "The minimum RPM at which we will allow the A/C compressor to run (this setting is in 10 RPM steps)." airConMaxRPM = "The maximum RPM at which we will allow the A/C compressor to run (this setting is in 100 RPM steps)." airConClTempCut = "The coolant temperature above which we will NOT allow the A/C compressor to run." airConIdleSteps = "Increase the idle PWM (%) or stepper motor (steps) up by this amount when the A/C request is active. Note that some cars have a separate idle-up valve that switches on automatically in tandem with the A/C compressor. In this case, this setting might be set to zero." airConTPSCutTime = "The TPS lockout time, for which the A/C compressor will not run after a high TPS condition has gone away. This prevents the compressor cutting in on gear changes if the car is being driven hard." airConCompOnDelay = "The delay period between a successful A/C request signal, and the compressor kicking in. This gives the idle-up time to kick in before the compressor loads the engine." airConAfterStartDelay = "The delay period after first starting the car, during which the A/C compressor will not run." airConRPMCutTime = "The RPM lockout time, for which the A/C compressor will not run after a high or low RPM condition has gone away. This prevents the compressor cutting in on gear changes if the car is being driven hard, or cutting in to early after nearly stalling the engine." airConIdleUpRPMAdder = "Increase the idle RPM target (as used by Idle Advance and Closed-Loop Idle) by this amount when the A/C request is active." airConPwmFanMinDuty = "If you are using a PWM cooling fan, the fan duty will be clamped to this value or higher (based on the coolant temp./duty cycle table) when the A/C compressor is engaged." vssPulsesPerKm = "The number of pulses on the VSS signal per KM/Mile when (pulses per KM/Mile) -mode is used.\nIn (CAN/Serial/Analog) -mode the Aux input value is divided by this number to get correct VSS. 0 = No dividing/disabled." vssAuxCh = "Use the Auxilary Input Channel Configuration -menus to read VSS from desired source (CAN/Serial/Analog) and then select that Aux in channel here" 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." iacStepperInv = "Invert the step pulse polarity" iacStepperPower = "Power the stepper motor only when performing a step (Default) or constantly. If unsure, choose Only When Active." 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 = "Determines 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 achieved." iacCLminValue = "When using closed loop idle control, this is the minimum position value that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve" iacCLmaxValue = "When using closed loop idle control, this is the maximum position value 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 integral of the PID (To prevent RPM dips coming 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 integral of the PID (To prevent RPM dips coming 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" 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)." 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" idleAdvStartDelay = "The number of seconds after matching settings before the idle advance control begins" 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." maeThresh = "The minimum speed that MAP must change at to trigger AE. Typical values are 40-100kPa/s" taeThresh = "The minimum speed that TPS must change at to trigger AE. Typical values are 40-100%/s" taeMinChange = "The minimum absolute change in TPS in order to engage AE. Typical values are 0-3%" maeMinChange = "The minimum absolute change in MAP in order to engage AE. Typical values are 0-5%" decelAmount = "Reduces fuel compared to VE table during deceleration. 100% means no reduction in fuel amount and 0% means all fuel is cut during decel (Do not confuse this with DFCO). Recommended to use values between 100 and 70%. Default: 100%. Works with both TPS and MAP based AE." 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." 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/engagement 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 engaged 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 = "A fixed hard rev limit is a single point that the fuel or ignition (or both) will be cut completely to reduce increasing RPMs" engineProtectMaxRPM = "The RPM point above which engine protections will engage. At this RPM and below, engine protections will NOT be active" ; AFR Protection Help afrProtectMAP = "Minimum manifold air pressure the AFR lean protection will activate" afrProtectRPM = "Minimum RPM the AFR lean protection will activate" afrProtectTPS = "Minimum current throttle position for the AFR lean protection to activate" afrProtectDeviationLambda = "Fixed mode = A fixed maximum lambda value (e.g. 0.95)\n\nTable mode = A maximum deviation (e.g. 0.1) from current lambda using target table + specified deviation\n\nChanging this also changes Maximum AFR" afrProtectDeviation = "Fixed mode = A fixed maximum AFR value (e.g. 14.0)\n\nTable mode = A maximum deviation (e.g. 1.5) from current AFR using target table + specified deviation\n\nChanging this also changes Maximum Lambda" afrProtectCutTime = "Time delay before activating AFR protection when all conditions has been fulfilled" afrProtectReactivationTPS = "Going below this throttle position (%) will deactivate this protection" oilPressureProtTime = "Time delay before activating oil pressure protection when all conditions has been fulfilled" 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" 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." 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 pressurised correctly." 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 TPS percentage 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 received." crkngAddCLTAdv = "Adds cold advance values to cranking angle." 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 compatibility 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." 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." enable_secondarySerial = "This Enables the secondary serial port . Secondary serial is serial3 on mega2560 processor, and Serial2 on STM32 and Teensy processor" secondarySerialProtocol = "The protocol or application to be attached to the secondary serial port" intcan_available = "Enables the internal CANBUS interface. This is only available on STM32 and Teensy processors" ;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 directly 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 assigned to Aux input channel 0" AUXin01Alias = "The Ascii alias assigned to Aux input channel 1" AUXin02Alias = "The Ascii alias assigned to Aux input channel 2" AUXin03Alias = "The Ascii alias assigned to Aux input channel 3" AUXin04Alias = "The Ascii alias assigned to Aux input channel 4" AUXin05Alias = "The Ascii alias assigned to Aux input channel 5" AUXin06Alias = "The Ascii alias assigned to Aux input channel 6" AUXin07Alias = "The Ascii alias assigned to Aux input channel 7" AUXin08Alias = "The Ascii alias assigned to Aux input channel 8" AUXin09Alias = "The Ascii alias assigned to Aux input channel 9" AUXin10Alias = "The Ascii alias assigned to Aux input channel 10" AUXin11Alias = "The Ascii alias assigned to Aux input channel 11" AUXin12Alias = "The Ascii alias assigned to Aux input channel 12" AUXin13Alias = "The Ascii alias assigned to Aux input channel 13" AUXin14Alias = "The Ascii alias assigned to Aux input channel 14" AUXin15Alias = "The Ascii alias assigned 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" cmdtestinj1Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj2Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj3Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj4Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj5Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj6Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj7Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj8Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestspk1Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestspk2Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestspk3Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestspk4Pulsed = "This will pulse the outputs for the selected duration at a frequency of 30Hz" cmdtestinj1on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj2on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj3on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj4on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj5on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj6on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj7on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestinj8on = "The injector output will be turned on. DO NOT USE THIS WITH INJECTORS CONNECTED" cmdtestspk1on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk2on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk3on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk4on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk5on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk6on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk7on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdtestspk8on = "The ignition output will be turned on. DO NOT USE THIS WITH COIL CONNECTED" cmdFormatSD = "Click this to format the SD card" ;For some reason the command name cmdSDFormat appears to be a reserved word and will not work 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 Instantaneous MAP sampling method. Recommended value: 20" ADCFILTER_BARO = "This setting is only available when using an external Baro sensor. Recommended value: 64" FILTER_FLEX = "Higher values provide more filtering, but slower Eth% and fuel temp response. Recommended value: 75" boostIntv = "The closed loop control interval will run every this many ms. Generally values between 50% and 100% of the valve frequency work best" boostByGearEnabled = "Open loop -> Constant limit in Duty cycle %\nClosed Loop -> Constant limit in kPa\nIn both cases the multiplied option simply takes a percentage of the values in the boost table" vvtMode = "Selects method of VVT control.\nOn/Off = No PWM control and output is only on or off.\nOpen Loop = PWM control where duty is taken directly from VVT table.\nClosed Loop = PWM control where VVT table is Cam angle target map and output duty is PID controlled." vvt2Enabled = "Secondary VVT output. Uses same frequency and control algorithm as primary VVT output." vvtPWMdir = "This is used to invert VVT closed loop PID direction if needed." vvt2PWMdir = "This is used to invert VVT2 closed loop PID direction if needed." vvtCL0DutyAng = "This value is used to bring the VVT cam angle to 0-100 range in closed loop mode by subtracting this value from the raw cam angle reading." vvt2CL0DutyAng = "This value is used to bring the VVT2 cam angle to 0-100 range in closed loop mode by subtracting this value from the raw cam angle reading." vvtCLMinAng = "Safety limit for minimum expected cam angle value. If cam angle gets smaller or equal to this, it triggers VVT error state, closed loop adjustment is disabled and VVT output duty drops to 0%" vvtCLMaxAng = "Safety limit for maximum expected cam angle value. If cam angle gets bigger than this, it triggers VVT error state, closed loop adjustment is disabled and VVT output duty drops to 0%" ANGLEFILTER_VVT = "Can be used to smooth out cam angle readings if needed. Only supported on specific decoders that have cam angle reading capability" vvtMinClt = "Minimum coolant temp to activate VVT" vvtDelay = "Time to wait after reaching minimum coolant temp (additional time for oil warmup)" wmiMode = "Simple mode - Output is turned on when preset boost level is reached. \nProportional Mode - Output PWM is proportionally controlled between two MAP values - MAP Value 1 = PWM:0% / MAP Value 2 = PWM:100% \nOpen loop - Output PWM follows 2D map value (RPM vs MAP) Cell value contains desired PWM% [range 0-100%] \nClosed loop - Output PWM follows injector duty cycle with 2D correction map applied (RPM vs MAP). Cell value contains correction value% [nom 100%]" 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." rtc_mode = "Enables the real time clock for time keeping" onboard_log_file_style = "Sdcard datalogger can be Disabled, CSV=Comma separated values, Binary is a Binary format equal to the A comand style current status" onboard_log_file_rate = "Rate at wich data is recorded to the logger storage" onboard_log_filenaming = "[Overwrite] the file is over written every time the a new log is started, [Date-time] creates a new file in the format YYMMDD-HHMMSS every datalog start, [Seqential] numbers the filenames + 1 on every datalog start" onboard_log_storage = "Only [sd-card] as datastorage is implemented at the moment, A FAT16 or FAT32 formatted sd card can be used" onboard_log_trigger_boot = "[On boot] the logger is started immediately on boot of the board" onboard_log_trigger_RPM = "[RPM] the logger is started when RPM is above the on threshold and stopped below the off threshold" onboard_log_trigger_prot = "[engine protection] the logger is started one of the corresponding bits in the engine protection is set" onboard_log_trigger_Vbat = "[Battery Voltage] the logger is started when the battery voltage is above the on threshold and stopped below the off threshold" onboard_log_trigger_Epin = "[Ext pin [polling]] the logger is running for as long the chosen pin is high and stopped when it is low. When set to [Ext pin [toggle]] the logger is toggled on/off with a pulse on this chosen pin number" onboard_log_tr1_duration = "When logging from boot is enabled, this is the duration the log will run for" onboard_log_tr2_thr_on = "When the engine RPM is above this threshold the datalogger is started" onboard_log_tr2_thr_off = "When the engine RPM is below this threshold the datalogger is stopped" onboard_log_tr3_thr_RPM = "When the bits of the RPM engine protection function are set the datalogger is started when no set anymore the logger is stopped" onboard_log_tr3_thr_MAP = "When the bits of the MAP engine protection function are set the datalogger is started when no set anymore the logger is stopped" onboard_log_tr3_thr_Oil = "When the bits of the Oil engine protection function are set the datalogger is started when no set anymore the logger is stopped" onboard_log_tr3_thr_AFR = "When the bits of the AFR engine protection function are set the datalogger is started when no set anymore the logger is stopped" onboard_log_tr4_thr_on = "When the measured battery voltage is above this threshold the datalogger is started" onboard_log_tr4_thr_off = "When the measured battery voltage is below this threshold the datalogger is stopped" onboard_log_tr5_Epin_pin = "The pin to trigger the datalogger start/stop" onboard_log_csv_separator = "Choose what character is used for the CSV separator between fields" 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." tachoMode = "The output mode for the tacho pulse. Fixed timing will produce a pulse that is always of the same duration, which works better with mode modern digital tachos. Dwell based output creates a pulse that is matched to the coil/s dwell time. If enabled the tacho pulse duration and timing is same as coil dwell and the number of pulses is same as number of ignition events. This can work better on some styles of tacho but note that the pulse duration might become problem on higher cylinder number engines." canBMWCluster = "Enables CAN broadcasting for BMW E46, E39 and E38 instrument clusters with message ID's 0x316, 0x329 and 0x545" canVAGCluster = "Enables CAN broadcasting for VAG instrument clusters with message ID's 0x280 and 0x5A0" canWBO = "Enables to recive AFR via CAN for supported controllers" caninputEndianess= "Byte ordering for values with two bytes." boostControlEnable = "Set the trigger to enable/disable the closedloop boost controller. When set to: \n 'fixed': if the fuel load exceeds the threshold closedloop boost controller is enbaled.\n 'baro': if the fuel load exceeds the baro the controller is enabled (legacy) " boostDCWhenDisabled = "When the closedloop boost controller is disabled by 'enable trigger', this is the Duty cycle set on the boost selenoid. Ususally this is 99% because it keeps the waste gate firmly closed until the threshold and builds boost as fast as possible (no wastegate leak)" boostControlEnableThreshold = "When the 'Boost control enable trigger' is set to 'fixed', this value is used as threshold. Usually the value is set just below the wastgate pressure of the used turbo setup. For example 130kpa for a 0.3 bar wastegate actuator. Below this value the ECU has no control over the boost anyway." dutyLim = "Sets the maximum allowed duty cycle of injectors. Duty cycle will be limited to this value reagardless of any other settings. If the value required is greater than 90 in order, it is recommended to consider using larger injectors." injAng = "The angle at which the injection ends relative to each cylinders TDC. Eg Numbers greater than 360 will cause the injection to end with the inlet valve open, and values smaller than 360 will cause the injection to end with the inlet valve closed (Dependant on cam timings)." airDenRates = "Corrects fuel based on intake air temperature / density. Values less than 100 remove fuel and values greater than 100 add fuel." baroFuelValues = "Corrects the amount of fuel based on atmospheric pressure / altitude. Values less than 100 remove fuel and values greater than 100 add fuel." ignAlgorithm = "Load source used for ignition table." CrankAng = "Ignition angle used during cranking. This is usually equal to or less than the idle advance value to have a smooth start, but will vary according to each engine configuration." dwellcrank = "Dwell used during engine cranking. This is usually slightly higher than the running dwell." dwellrun = "The time that the ignition coil is charging when the engine is running. This is a critical setting and can result in damage to the ignition coil/s if set incorrectly!" dwellRates = "Adjust the nominal dwell time based on the system voltage. Values less than 100 remove dwell time and values greater than 100 add dwell time." primePulse = "Injection pulse to prime the fuel system on ECU powerup. High values when the engine is cold may help with starting." idleTaperTime = "Duration of the transition from idle cranking table to idling table or PID idle." wueRates = "Table for fuel enrichment when the engine is cold. Final enrichment value must be 100%." iatRetRates = "Removes ignition timing based on intake air temperature to prevent detonation. Any number greater than 0 removes ignition timing." iacCLValues = "Idle rpm targets used for PID and idling advance." iacOLStepVal = "Table used for idle valve control." iacOLPWMVal = "Table used for idle valve control." iacCrankDuty = "Table used to control the idle valve during cranking." iacCrankSteps = "Table used to control the idle valve during cranking." egoMAPMax = "Only Correct below this MAP Value" egoMAPMin = "Only Correct above this MAP 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 defined 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 = "!This is a critical setting!" field = "Outputs WILL NOT work if incorrect board is selected" field = "Board Layout", pinLayout field = "Stoichiometric ratio", stoich field = "Injector Layout", injLayout field = "Injector Pairing", inj4CylPairing, {}, { injLayout != 0 && nCylinders == 4 } field = "MAP Sample method", mapSample field = "MAP Sample switch point", mapSwitchPoint, { mapSample >= 1 } 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 = "http://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 } slider = "Flex sensor filter", FILTER_FLEX, horizontal, { 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 = flexFuel, "Fuel Sensor Settings", border topicHelp = "http://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 > 0 } dialog = vss_gear_2, "", xAxis field = "Speed ratio 2", vssRatio2 commandButton = "Set Gear 2", cmdVSSratio2, { vssMode > 0 } dialog = vss_gear_3, "", xAxis field = "Speed ratio 3", vssRatio3 commandButton = "Set Gear 3", cmdVSSratio3, { vssMode > 0 } dialog = vss_gear_4, "", xAxis field = "Speed ratio 4", vssRatio4 commandButton = "Set Gear 4", cmdVSSratio4, { vssMode > 0 } dialog = vss_gear_5, "", xAxis field = "Speed ratio 5", vssRatio5 commandButton = "Set Gear 5", cmdVSSratio5, { vssMode > 0 } dialog = vss_gear_6, "", xAxis field = "Speed ratio 6", vssRatio6 commandButton = "Set Gear 6", cmdVSSratio6, { vssMode > 0 } 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/VSS ratio", vssPulsesPerKm, { vssMode > 0 } commandButton = "60km/h auto-calibrate", cmdVSS60kmh, { vssMode > 0 } field = "Smoothing Factor", vssSmoothing, { vssMode > 0 } dialog = vssSettings, "", yAxis topicHelp = "http://wiki.speeduino.com/en/configuration/VSS" field = "VSS Input Mode", vssMode field = "VSS Pin", vssPin, { vssMode > 1 } ;field = "Use Pullup", vssPullup, { vssMode > 1 } field = "VSS Aux in Channel", vssAuxCh, { vssMode == 1 } panel = vss_calibration panel = vss_gear_detection dialog = tacho, "Tacho" field = "Output pin", tachoPin field = "Tacho pulse mode", tachoMode field = "Output speed", tachoDiv, { tachoMode == 0 } field = "Pulse duration", tachoDuration, { tachoMode == 0 } 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 = "Min. TPS change", taeMinChange, { aeMode == 0 } field = "MAPdot Threshold", maeThresh, { aeMode == 1 } field = "Min. MAP change", maeMinChange, { aeMode == 1 } field = "Accel Time", aeTime field = "Taper Start RPM", aeTaperMin field = "Taper End RPM", aeTaperMax dialog = decelEnleanment, "Deceleration Enleanment" field = "Fuel Amount", decelAmount 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, "Deceleration 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 } field = "Enable cutoff taper", dfcoTaperEnable, { dfcoEnabled } field = "Cutoff taper time", dfcoTaperTime, { dfcoEnabled && dfcoTaperEnable } field = "Taper end fuel amount", dfcoTaperFuel, { dfcoEnabled && dfcoTaperEnable } field = "Taper advance remove", dfcoTaperAdvance, { dfcoEnabled && dfcoTaperEnable } dialog = accelEnrichments_north_south, "" liveGraph = pump_ae_Graph, "AE Graph" #if LAMBDA graphLine = lambda #else graphLine = afr #endif 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://wiki.speeduino.com/en/configuration/Acceleration_Wizard" panel = accelEnrichments_north, North panel = accelEnrichments_north_south, Center panel = accelEnrichments_center, Center panel = decelEnleanment 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 = "http://wiki.speeduino.com/en/configuration/Injector_Characteristics" field = "Injector Duty Limit", dutyLim panel = injOpenTimeDialog panel = injAngleDialog dialog = egoControl, "" topicHelp = "http://wiki.speeduino.com/en/configuration/O2" field = "Sensor Type", egoType field = "WBO over CAN", canWBO, {}, { CANisAvailable && (egoType == 2) } field = "#Please ensure you calibrate your O2 sensor in the Tools menu", {}, {}, { egoType && (canWBO == 0) } 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_afr, { egoType && (egoAlgorithm < 3) } field = "and correct below ", ego_max_afr, { egoType && (egoAlgorithm < 3) } field = "Only correct above ", ego_min_lambda, { egoType && (egoAlgorithm < 3) } field = "and correct below ", ego_max_lambda, { 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 = "Active Below MAP", egoMAPMax, { egoType && (egoAlgorithm < 3) } field = "Active Above MAP", egoMAPMin, { 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 = "http://wiki.speeduino.com/en/configuration/Thermo_fan" displayOnlyField = !"No PWM Fan available on MCU", blankfield, {intcan_available == 0 && fanEnable == 2},{intcan_available == 0 && fanEnable == 2} 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 == 1 } field = "Fan hysteresis", fanHyster, { fanEnable == 1 } field = "PWM fan frequency", fanFreq, { intcan_available && fanEnable == 2 } dialog = pwmFan, "PWM Fan Curve", panel = pwm_fan_curve, dialog = airConIdleUp, "Idle Up When A/C Compressor On" field = "Idle-Up Amount", airConIdleSteps, { airConEnable } field = "Idle-Up RPM Adder", airConIdleUpRPMAdder, { airConEnable } dialog = airConRPMLimit,"RPM Limiting" field = "Min. RPM for A/C Operation", airConMinRPM, { airConEnable } field = "Max. RPM for A/C Operation", airConMaxRPM, { airConEnable } field = "Lockout time after high/low RPM", airConRPMCutTime, { airConEnable } dialog = airConTPSLimit,"TPS Limiting" field = "Cut A/C at TPS Position", airConTPSCut, { airConEnable } field = "Lockout time after high TPS", airConTPSCutTime, { airConEnable } dialog = airConCoolantTempLimit,"Coolant Temp. Limiting" field = "Coolant A/C Cutout Temp.", airConClTempCut, { airConEnable } dialog = airConFanSettings field = "Run Engine Cooling Fan with A/C", airConTurnsFanOn, { airConEnable } field = "Min. Duty for PWM Cooling Fan", airConPwmFanMinDuty, { airConEnable } field = "Stand-Alone A/C Fan", airConFanEnabled, { airConEnable } field = "Stand-Alone A/C Fan Output Pin", airConFanPin, { airConEnable && airConFanEnabled } field = "Stand-Alone A/C Fan Output Polarity", airConFanPol, {airConEnable && airConFanEnabled } dialog = airCon,"Air Conditioning" field = "Air Conditioning Enable", airConEnable field = "A/C Request Input Pin", airConReqPin, { airConEnable } field = "A/C Compressor Output Pin", airConCompPin, { airConEnable } field = "A/C Request Input Polarity", airConReqPol, { airConEnable } field = "A/C Comp. Output Polarity", airConCompPol, { airConEnable } field = "A/C Comp. On Delay (During Operation)", airConCompOnDelay, { airConEnable } field = "A/C Initial Delay After Cranking", airConAfterStartDelay, { airConEnable } panel = airConRPMLimit panel = airConTPSLimit panel = airConCoolantTempLimit panel = airConFanSettings panel = airConIdleUp dialog = stepper_idle, "Stepper Idle" field = "Step time (ms)", iacStepTime, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Cool time (ms)", iacCoolTime, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Home steps", iacStepHome, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Minimum Steps", iacStepHyster, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Don't exceed", iacMaxSteps, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Stepper Inverted", iacStepperInv, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } field = "Stepper Power", iacStepperPower, { iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } 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" displayOnlyField = "# !!! Please note that 1.0 means 100% !!!" field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } field = "I", idleKI, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } field = "D", idleKD, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } field = "Minimum valve value", iacCLminValue, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } field = "Maximum valve value", iacCLmaxValue, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 } field = "Integral reset above TPS", iacTPSlimit, { iacAlgorithm == 6 || iacAlgorithm == 7 } field = "Integral reset RPM Hysteresis", iacRPMlimitHysteresis, { iacAlgorithm == 6 || iacAlgorithm == 7 } dialog = idleSettings, "Idle Settings" topicHelp = "http://wiki.speeduino.com/en/configuration/Idle" field = "Idle control type", iacAlgorithm field = "Crank to run taper", idleTaperTime, { iacAlgorithm == 2 || iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 7 } 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 fuelling. Eg 100% = No change." dialog = crankingIgnOptions, "Cranking Timing", yAxis field = "Cranking advance Angle", CrankAng, { ignCranklock == 0 } field = "Add cold advance", crkngAddCLTAdv, { 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" topicHelp = "http://wiki.speeduino.com/en/configuration/Priming" panel = priming_pw_curve dialog = crankPW, "Cranking Settings", yAxis topicHelp = "http://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 topicHelp = "http://wiki.speeduino.com/en/configuration/ASE" field = "#Time and duration curves share common coolant values" panel = ASE_amount panel = ASE_time dialog = triggerSettings,"Trigger Settings",4 topicHelp = "http://wiki.speeduino.com/en/decoders" field = "Trigger Pattern", TrigPattern field = "Primary base teeth", numTeeth, { TrigPattern == 0 || TrigPattern == 2 || TrigPattern == 11 || TrigPattern == 18 || TrigPattern == 19 || TrigPattern == 21 } field = "Primary trigger speed", TrigSpeed, { TrigPattern == 0 || TrigPattern == 2 } 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 && TrigPattern != 22 } ;4G63 uses both edges ;NGC 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 || TrigPattern == 21 || TrigPattern == 24 || TrigPattern == 25 } ;Missing tooth, dual wheel and Miata 9905, weber-marelli, ST170, DRZ400 Renix, Rover MEMS, K6A field = "Level for 1st phase", PollLevelPol, { (TrigPattern == 0 && TrigSpeed == 0 && trigPatternSec == 2) } field = "Missing Tooth Secondary type", trigPatternSec, { (TrigPattern == 0&& TrigSpeed == 0) || TrigPattern == 25 } 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 || TrigPattern == 21 } ;Dual wheel, 4G63, Audi 135, Nissan 360, Miata 99-05, weber-marelli. DRZ400 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 overridden by the Cranking advance angle value above" dialog = newIgnitionMode, "Per tooth ignition events" field = "This option is will generally improve accuracy on most compatible triggers" field = "However if timing issues are encountered, please disable this" field = "Enable per tooth timing", perToothIgn field = "Dwell error correction", dwellErrCorrect,{ perToothIgn } dialog = sparkSettings,"Spark Settings",4 topicHelp = "http://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, { 1 }, {TrigPattern == 0 || TrigPattern == 1 || TrigPattern == 2 || TrigPattern == 3 || TrigPattern == 4 || TrigPattern == 9 || TrigPattern == 12 || TrigPattern == 13 || TrigPattern == 16 || TrigPattern == 18 || TrigPattern == 19 || TrigPattern == 22 || TrigPattern == 24 || TrigPattern == 25 || TrigPattern == 26 } ;Only works for missing tooth, distributor, dual wheel, GM 7X, 4g63, Miata 99-05, nissan 360, Subaru 6/7, 420a, weber-marelli, NGC Renix, K6A dialog = dwellSettings, "Dwell Settings", 4 topicHelp = "http://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 = " Dwell scale for repeated spark", ignRptScale, { crankIgnOutRpt } 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 = "Activate after", idleAdvStartDelay, { idleAdvEnabled >= 1 } 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 = "http://wiki.speeduino.com/en/configuration/IdleAdvance" panel = idleAdvanceSettings_east panel = idle_advance_curve, { idleAdvEnabled >= 1 } panel = iacClosedLoop_curve, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7|| 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 = boostByGear, "Boost by Gear" field = "Enable Boost by Gear", boostByGearEnabled field = "Gear 1 ", boostByGear1, { boostByGearEnabled } field = "Gear 2 ", boostByGear2, { boostByGearEnabled } field = "Gear 3 ", boostByGear3, { boostByGearEnabled } field = "Gear 4 ", boostByGear4, { boostByGearEnabled } field = "Gear 5 ", boostByGear5, { boostByGearEnabled } field = "Gear 6 ", boostByGear6, { boostByGearEnabled } dialog = boostBaseDC, "Closed loop initial duty" field = "Base duty cycle to be used for a given boost target", {}, { boostType == 2 } panel = boostDCLupTbl, { boostEnabled && boostType == 1 } dialog = boostDCTarget, "Primary Boost table" field = "In open loop mode, the values in this table are duty cycle %", {}, {}, { boostType == 0 } field = "In closed loop mode, the values in this table are boost targets in kPa", {}, {}, { boostType == 1 } panel = boostTbl dialog = boostLoad, "" field = "Mode", boostType panel = boostDCTarget panel = boostBaseDC, { boostType == 1 } dialog = coolantProtection, "Coolant Based Rev Limit" panel = coolant_prot_curve, { hardRevMode == 2 } 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 limiter mode", hardRevMode field = "Fixed Rev limit", hardRevLim, { hardRevMode == 1 } panel = coolantProtection, { hardRevMode == 2 } dialog = oilPressureProtection, "Oil Pressure" field = "Oil Pressure Protection", oilPressureProtEnbl, { oilPressureEnable } field = "Oil Pressure cut delay", oilPressureProtTime, { oilPressureEnable && oilPressureProtEnbl } panel = oil_pressure_prot_curve, { oilPressureEnable && oilPressureProtEnbl } ; AFR engine protection dialog dialog = afrProtect, "AFR Protection", yAxis field = "AFR protection is used to prevent engine from running lean" field = "#Note: This function requires wideband sensor and proper AFR table" field = "" field = "Enable AFR protection ", afrProtectEnabled, {egoType == 2} field = "Minimum manifold air pressure ", afrProtectMAP, {afrProtectEnabled} field = "Minimum engine RPM ", afrProtectRPM, {afrProtectEnabled} field = "Minimum throttle position ", afrProtectTPS, {afrProtectEnabled} field = "Maximum lambda ", afrProtectDeviationLambda, {afrProtectEnabled}, {afrProtectEnabled == 0 || afrProtectEnabled == 1} field = "Maximum lambda deviation ", afrProtectDeviationLambda, {afrProtectEnabled}, {afrProtectEnabled == 2} field = "Maximum AFR ", afrProtectDeviation, {afrProtectEnabled}, {afrProtectEnabled == 0 || afrProtectEnabled == 1} field = "Maximum AFR deviation ", afrProtectDeviation, {afrProtectEnabled}, {afrProtectEnabled == 2} field = "Time before cut ", afrProtectCutTime, {afrProtectEnabled} field = "" field = "Reactivate below throttle ", afrProtectReactivationTPS, {afrProtectEnabled} 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 indicator = { engineProtectCoolant }, "Coolant Protect OFF", "Coolant Protect ON", green, black, red, black dialog = engineProtectionWest, "Engine Protection" field = "Protection RPM Limit ('Limp Home')", engineProtectMaxRPM, { engineProtectType } panel = protectIndicatorPanel, { engineProtectType } dialog = engineProtection, "Hard Limit Configuration", yAxis topicHelp = "http://wiki.speeduino.com/en/configuration/Rev_Limits" field = "Protection Cut", engineProtectType ;field = "!It is recommended to use Spark Cut on non-sequential fuel configurations", {}, {}, { engineProtectType > 1 && injLayout != 3 } field = "Cut method", hardCutType, { engineProtectType > 0 } ;Only available for the protection modes that include ignition. panel = rolling_prot_curve, { hardCutType == 1 } panel = engineProtectionWest 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 = "http://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 } field = "Leanest Lambda", n2o_maxLambda, { n2o_enable > 0 } dialog = NitrousControl, "Nitrous" topicHelp = "http://wiki.speeduino.com/en/configuration/Nitrous_Control" panel = NitrousMain, North panel = NitrousStage1, West, { n2o_enable > 0 } panel = NitrousStage2, East, { n2o_enable > 1 } dialog = batCal, "Calibrate voltage reading" topicHelp = "http://wiki.speeduino.com/en/configuration/Sensor_Calibration" slider = "Battery Voltage reading offset", batVoltCorrect, horizontal dialog = mapCal, "Calibrate MAP" topicHelp = "http://wiki.speeduino.com/en/configuration/Sensor_Calibration" field = "#MAP Sensor" settingSelector = "Common Pressure Sensors" settingOption = "MPX4115/MPXxx6115A/KP234", mapMin=10, mapMax=121 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf Vout = VCC * (0.009*P - 0.095) settingOption = "MPX4250A/MPXA4250A", 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 = "MPXH6300A", mapMin=1, mapMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353) settingOption = "MPX5700A", mapMin=-31, mapMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04) settingOption = "MPXH6400A", mapMin=3, mapMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.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 settingOption = "MPX4100A", mapMin=14, mapMax=109 ; https://www.nxp.com/docs/en/data-sheet/MPX4100A.pdf Vout = VS (P x 0.01059 - 0.1518) 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/MPXxx6115A/KP234", baroMin=10, baroMax=121 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf Vout = VCC * (0.009*P - 0.095) settingOption = "MPX4250A/MPXA4250A", 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 = "MPXH6300A", baroMin=1, baroMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353) settingOption = "MPX5700A", baroMin=-31, baroMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04) settingOption = "MPXH6400A", baroMin=3, baroMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.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", baroMin=-6, baroMax=323 settingOption = "MPX4100A", baroMin=14, baroMax=109 ; https://www.nxp.com/docs/en/data-sheet/MPX4100A.pdf Vout = VS (P x 0.01059 - 0.1518) 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", EMAPPin, { useEMAP } settingSelector = "Common Pressure Sensors", { useEMAP } settingOption = "MPX4115/MPXxx6115A/KP234", EMAPMin=10, EMAPMax=118 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf settingOption = "MPX4250A/MPXA4250A", 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 = "MPXH6300A", EMAPMin=1, EMAPMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353) settingOption = "MPX5700A", EMAPMin=-31, EMAPMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04) settingOption = "MPXH6400A", EMAPMin=3, EMAPMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.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 settingOption = "MPX4100A", EMAPMin=14, EMAPMax=109 ; https://www.nxp.com/docs/en/data-sheet/MPX4100A.pdf Vout = VS (P x 0.01059 - 0.1518) 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 } #if pressure_bar settingOption = "0-10 BAR", fuelPressureMin=-1.25, fuelPressureMax=11.25 ; regular sensors give 0.5V to 4.5V for 0 bar to rated bar. Formula Vout = P x 4 / P_rated + 0.5 settingOption = "0-100 PSI", fuelPressureMin=-0.1, fuelPressureMax=7.1 ; these are just converted psi to bar. Kept because most off-shelf are in PSI settingOption = "0-150 PSI", fuelPressureMin=-1.25, fuelPressureMax=11.58 #else 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 #endif field = "Pressure at 0v", fuelPressureMin, { fuelPressureEnable } field = "Pressure at 5v", fuelPressureMax, { fuelPressureEnable } dialog = fuelPressureDialog, "Fuel Pressure", xAxis #if pressure_bar gauge = fuelPressureBarGauge #else gauge = fuelPressureGauge #endif panel = fuelPressureSettings dialog = oilPressureSettings field = "Enabled", oilPressureEnable field = "Pin", oilPressurePin, { oilPressureEnable } settingSelector = "Common Sensors", { oilPressureEnable } #if pressure_bar settingOption = "0-10 BAR", oilPressureMin=-1.25, oilPressureMax=11.25 ; regular sensors give 0.5V to 4.5V for 0 bar to rated bar. Formula Vout = P x 4 / P_rated + 0.5 settingOption = "0-100 PSI", oilPressureMin=-0.1, oilPressureMax=7.1 ; these are just converted psi to bar. Kept because most off-shelf are in PSI settingOption = "0-150 PSI", oilPressureMin=-1.25, oilPressureMax=11.58 #else 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 #endif field = "Pressure at 0v", oilPressureMin, { oilPressureEnable } field = "Pressure at 5v", oilPressureMax, { oilPressureEnable } dialog = oilPressureDialog, "Oil Pressure", xAxis #if pressure_bar gauge = oilPressureBarGauge #else gauge = oilPressureGauge #endif panel = oilPressureSettings dialog = pressureSensors, "Pressure Transducers" topicHelp = "http://wiki.speeduino.com/en/configuration/Sensor_Calibration" panel = fuelPressureDialog panel = oilPressureDialog dialog = boostSettings, "Boost Control" topicHelp = "http://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 panel = boostByGear, { boostEnabled && vssMode > 0 } field = "Closed Loop settings" field = "Control mode", boostMode, { boostEnabled && boostType == 1 } field = "Boost control enable trigger", boostControlEnable { boostEnabled && boostType == 1 } field = "Valve duty when below threshold", boostDCWhenDisabled { boostEnabled && boostType == 1 } field = "Boost control enable threshold", boostControlEnableThreshold { boostEnabled && boostControlEnable && 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 = vvt2, "Second VVT output" field = "!VVT2 PWM is shared with WMI. The 2 cannot be used at the same time.", {}, {}, { wmiEnabled } field = "VVT2 Control Enabled", vvt2Enabled, { !wmiEnabled } field = "VVT2 output pin", vvt2Pin, { vvt2Enabled } field = "VVT2 Trigger edge", TrigEdgeThrd, { vvt2Enabled } field = "Increased duty direction",vvt2PWMdir, { vvt2Enabled && vvtMode == 2 } field = "VVT2 Cam angle @ 0% duty",vvt2CL0DutyAng, { vvt2Enabled && vvtMode == 2 } dialog = vvtClosedLoop, "Closed loop" field = "Increased duty direction", vvtPWMdir field = "Hold duty used", vvtCLUseHold field = "Hold duty", vvtCLholdDuty, { vvtCLUseHold } field = "Adjust fuel timing", vvtCLAlterFuelTiming field = "Cam angle @ 0% duty", vvtCL0DutyAng field = "Minimum Cam angle", vvtCLMinAng field = "Maximum Cam angle", vvtCLMaxAng field = "" displayOnlyField = "# !!! Please note that 1.0 means 100% !!!" 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" topicHelp = "http://wiki.speeduino.com/en/configuration/VVT" field = "VVT Control Enabled", vvtEnabled field = "VVT Minimum CLT", vvtMinClt, { vvtEnabled } field = "VVT Delay", vvtDelay, { vvtEnabled } field = "VVT Mode", vvtMode, { vvtEnabled } field = "#Note: Closed loop is currently experimental and available on Miata and missing tooth patterns ONLY", {}, {}, { vvtMode == 2 } field = "Load source", vvtLoadSource, { vvtEnabled } field = "VVT output pin", vvt1Pin, { vvtEnabled } field = "VVT solenoid freq.", vvtFreq, { vvtEnabled } slider = "VVT angle filter ", ANGLEFILTER_VVT,horizontal, { vvtEnabled } panel = vvtClosedLoop, { vvtEnabled && vvtMode == 2 } panel = vvt2, { vvtEnabled } dialog = wmiSettings, "WMI Control" field = "!WMI PWM is shared with VVT2. The 2 cannot be used at the same time.", {}, {}, { vvt2Enabled } field = "WMI Control Enabled", wmiEnabled, { !vvt2Enabled } 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", vvt2Pin, { wmiEnabled } field = "!WMI PWM frequency is the same as VVT. The 2 cannot be set independently.", {}, {}, { vvt2Enabled } 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 = "Ignition advance correction", wmiAdvEnabled, { wmiEnabled } panel = wmi_adv_curve, { wmiEnabled && wmiAdvEnabled } dialog = warmup, "Warmup Enrichment (WUE) - Percent Multiplier" topicHelp = "http://wiki.speeduino.com/en/configuration/Warmup" panel = warmup_curve ;Fuel trim composite dialog dialog = inj_trim1TblTitle, "Channel #1" panel = fuelTrimTable1Tbl, { fuelTrimEnabled && nCylinders >= 2 } dialog = inj_trim2TblTitle, "Channel #2" panel = fuelTrimTable2Tbl, { fuelTrimEnabled && nCylinders >= 2 } dialog = inj_trim3TblTitle, "Channel #3" panel = fuelTrimTable3Tbl, { fuelTrimEnabled && nCylinders >= 3 } dialog = inj_trim4TblTitle, "Channel #4" panel = fuelTrimTable4Tbl, { fuelTrimEnabled && nCylinders >= 4 } dialog = inj_trim5TblTitle, "Channel #5" panel = fuelTrimTable5Tbl, { fuelTrimEnabled && nCylinders >= 5 } dialog = inj_trim6TblTitle, "Channel #6" panel = fuelTrimTable6Tbl, { fuelTrimEnabled && nCylinders >= 6 } dialog = inj_trim7TblTitle, "Channel #7" panel = fuelTrimTable7Tbl, { fuelTrimEnabled && nCylinders >= 7 } dialog = inj_trim8TblTitle, "Channel #8" panel = fuelTrimTable8Tbl, { fuelTrimEnabled && nCylinders >= 8 } 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 = "http://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 = "On - Pulsed", cmdtestinj1Pulsed,{!testenabled && testactive} commandButton = "On - 100% DC", cmdtestinj1on,{!testenabled && testactive} dialog = outputtestinj2, "Injector CH2", yAxis commandButton = "Off", cmdtestinj2off,{testactive && nFuelChannels >= 2 } commandButton = "On - Pulsed", cmdtestinj2Pulsed,{!testenabled && testactive && nFuelChannels >= 2 } commandButton = "On - 100% DC", cmdtestinj2on,{ !testenabled && testactive && nFuelChannels >= 2 } dialog = outputtestinj3, "Injector CH3", yAxis commandButton = "Off", cmdtestinj3off,{ testactive && nFuelChannels >= 3 } commandButton = "On - Pulsed", cmdtestinj3Pulsed,{!testenabled && testactive && nFuelChannels >= 3 } commandButton = "On - 100% DC", cmdtestinj3on,{ !testenabled && testactive && nFuelChannels >= 3 } dialog = outputtestinj4, "Injector CH4", yAxis commandButton = "Off", cmdtestinj4off,{ testactive && nFuelChannels >= 4 } commandButton = "On - Pulsed", cmdtestinj4Pulsed,{!testenabled && testactive && nFuelChannels >= 4 } commandButton = "On - 100% DC", cmdtestinj4on ,{ !testenabled && testactive && nFuelChannels >= 4 } dialog = outputtestinj5, "Injector CH5", yAxis commandButton = "Off", cmdtestinj5off,{ testactive && nFuelChannels >= 5 } commandButton = "On - Pulsed", cmdtestinj5Pulsed,{!testenabled && testactive && nFuelChannels >= 5 } commandButton = "On - 100% DC", cmdtestinj5on,{ !testenabled && testactive && nFuelChannels >= 5 } dialog = outputtestinj6, "Injector CH6", yAxis commandButton = "Off", cmdtestinj6off,{ testactive && nFuelChannels >= 6 } commandButton = "On - Pulsed", cmdtestinj6Pulsed,{!testenabled && testactive && nFuelChannels >= 6 } commandButton = "On - 100% DC", cmdtestinj6on ,{ !testenabled && testactive && nFuelChannels >= 6 } dialog = outputtestinj7, "Injector CH7", yAxis commandButton = "Off", cmdtestinj7off,{ testactive && nFuelChannels >= 7 } commandButton = "On - Pulsed", cmdtestinj7Pulsed,{!testenabled && testactive && nFuelChannels >= 7 } commandButton = "On - 100% DC", cmdtestinj7on,{ !testenabled && testactive && nFuelChannels >= 7 } dialog = outputtestinj8, "Injector CH8", yAxis commandButton = "Off", cmdtestinj8off,{ testactive && nFuelChannels >= 8 } commandButton = "On - Pulsed", cmdtestinj8Pulsed,{!testenabled && testactive && nFuelChannels >= 8 } commandButton = "On - 100% DC", cmdtestinj8on ,{ !testenabled && testactive && nFuelChannels >= 8 } dialog = outputtest_injectors_south, "Injector Driver Output Test", xAxis panel = outputtestinj1 panel = outputtestinj2 panel = outputtestinj3 panel = outputtestinj4 panel = outputtestinj5 panel = outputtestinj6 panel = outputtestinj7 panel = outputtestinj8 dialog = outputtest_injectors, "Injector Driver Output Test", yAxis field = "Test pulse duration", hwTestInjDuration, {testactive} panel = outputtest_injectors_south dialog = outputtestspk1, "Spark CH1 ", yAxis commandButton = "Off", cmdtestspk1off,{testactive} commandButton = "On - Pulsed", cmdtestspk1Pulsed,{!testenabled && testactive} commandButton = "On - 100% DC", cmdtestspk1on,{!testenabled && testactive} dialog = outputtestspk2, "Spark CH2", yAxis commandButton = "Off", cmdtestspk2off,{testactive && nIgnChannels >= 2 } commandButton = "On - Pulsed", cmdtestspk2Pulsed,{!testenabled && testactive && nIgnChannels >= 2 } commandButton = "On - 100% DC", cmdtestspk2on,{ !testenabled && testactive && nIgnChannels >= 2 } dialog = outputtestspk3, "Spark CH3", yAxis commandButton = "Off", cmdtestspk3off,{testactive && nIgnChannels >= 3 } commandButton = "On - Pulsed", cmdtestspk3Pulsed,{!testenabled && testactive && nIgnChannels >= 3 } commandButton = "On - 100% DC", cmdtestspk3on,{ !testenabled && testactive && nIgnChannels >= 3 } dialog = outputtestspk4, "Spark CH4", yAxis commandButton = "Off", cmdtestspk4off,{testactive && nIgnChannels >= 4 } commandButton = "On - Pulsed", cmdtestspk4Pulsed,{!testenabled && testactive && nIgnChannels >= 4} commandButton = "On - 100% DC", cmdtestspk4on,{ !testenabled && testactive && nIgnChannels >= 4 } dialog = outputtestspk5, "Spark CH5", yAxis commandButton = "Off", cmdtestspk5off,{testactive && nIgnChannels >= 5 } commandButton = "On - Pulsed", cmdtestspk5Pulsed,{!testenabled && testactive && nIgnChannels >= 5} commandButton = "On - 100% DC", cmdtestspk5on,{ !testenabled && testactive && nIgnChannels >= 5 } dialog = outputtestspk6, "Spark CH6", yAxis commandButton = "Off", cmdtestspk6off,{testactive && nIgnChannels >= 6 } commandButton = "On - Pulsed", cmdtestspk6Pulsed,{!testenabled && testactive && nIgnChannels >= 6} commandButton = "On - 100% DC", cmdtestspk6on,{ !testenabled && testactive && nIgnChannels >= 6 } dialog = outputtestspk7, "Spark CH7", yAxis commandButton = "Off", cmdtestspk7off,{testactive && nIgnChannels >= 7 } commandButton = "On - Pulsed", cmdtestspk7Pulsed,{!testenabled && testactive && nIgnChannels >= 7} commandButton = "On - 100% DC", cmdtestspk7on,{ !testenabled && testactive && nIgnChannels >= 7 } dialog = outputtestspk8, "Spark CH8", yAxis commandButton = "Off", cmdtestspk8off,{testactive && nIgnChannels >= 8 } commandButton = "On - Pulsed", cmdtestspk8Pulsed,{!testenabled && testactive && nIgnChannels >= 8} commandButton = "On - 100% DC", cmdtestspk8on,{ !testenabled && testactive && nIgnChannels >= 8 } dialog = outputtest_spark_south, "Spark Driver Output Test", xAxis panel = outputtestspk1 panel = outputtestspk2 panel = outputtestspk3 panel = outputtestspk4 panel = outputtestspk5 panel = outputtestspk6 panel = outputtestspk7 panel = outputtestspk8 dialog = outputtest_spark, "Spark Driver Output Test", yAxis field = "Test pulse duration", hwTestIgnDuration, {testactive} panel = outputtest_spark_south dialog = outputtest1,"Test Output Hardware" topicHelp = "http://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 = CanBcast, "CAN Broadcasting menu" field = "BMW Instrument Cluster Broadcast", canBMWCluster field = "VAG Instrument Cluster Broadcast", canVAGCluster dialog = Auxin_north 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 = selectionOfEdianness. , "Endianness", yAxis field = "", caninputEndianess {(enable_intcan && intcan_available)} 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 = AuxinCenter, "", xAxis field = "" panel = selectionOfEdianness. ;dialog = Canin_config2, "External Data Input" ; field = "Enable External data input", enable_intcandata_in dialog = Canin_config, "",yAxis topicHelp = "http://wiki.speeduino.com/en/Secondary_Serial_IO_interface#read-external-analog-data-from-a-remote-device" panel = Auxin_north panel = AuxinCenter 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://wiki.speeduino.com/en/Secondary_Serial_IO_interface" field = "Enable Second Serial", enable_secondarySerial field = "Second Serial protocol", secondarySerialProtocol, { enable_secondarySerial } #if mcu_teensy field = "Enable Internal Canbus", enable_intcan #elif mcu_stm32 field = "Enable Internal Canbus", enable_intcan #endif ; field = "Speeduino TsCanId", speeduino_tsCanId ;field = "True Canbus Address", true_address, {enable_secondarySerial||enable_intcan} field = "True Canbus Address", true_address, { CANisAvailable } 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, { CANisAvailable } field = "Speeduino OBD address", obd_address, { CANisAvailable } dialog = reset_control, "Reset Control" topicHelp = "http://wiki.speeduino.com/en/configuration/Reset_Control#settings-in-tuner-studio" ; 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, "Auxiliary 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 = "#BATTERY VOLTAGE INDICATOR" field = "Low", batlow field = "High", bathigh 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 = "A/C Request Pin", airConReqPin, {airConEnable} displayOnlyField = "A/C Output Pin", airConCompPin, {airConEnable} ;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]} ;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_output_limit_1, "", xAxis field = "", kindOfLimiting0, {outputPin[0]} field = "output time", outputTimeLimit[0], {outputPin[0]} dialog = prgm_out_rules_2_output_limit_1, "", xAxis field = "", kindOfLimiting1, {outputPin[1]} field = "output time", outputTimeLimit[1], {outputPin[1]} dialog = prgm_out_rules_3_output_limit_1, "", xAxis field = "", kindOfLimiting2, {outputPin[2]} field = "output time", outputTimeLimit[2], {outputPin[2]} dialog = prgm_out_rules_4_output_limit_1, "", xAxis field = "", kindOfLimiting3, {outputPin[3]} field = "output time", outputTimeLimit[3], {outputPin[3]} dialog = prgm_out_rules_5_output_limit_1, "", xAxis field = "", kindOfLimiting4, {outputPin[4]} field = "output time", outputTimeLimit[4], {outputPin[4]} dialog = prgm_out_rules_6_output_limit_1, "", xAxis field = "", kindOfLimiting5, {outputPin[5]} field = "output time", outputTimeLimit[5], {outputPin[5]} dialog = prgm_out_rules_7_output_limit_1, "", xAxis field = "", kindOfLimiting6, {outputPin[6]} field = "output time", outputTimeLimit[6], {outputPin[6]} dialog = prgm_out_rules_8_output_limit_1, "", xAxis field = "", kindOfLimiting7, {outputPin[7]} field = "output time", outputTimeLimit[7], {outputPin[7]} dialog = prgm_out_rules_1_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_1_output_limit_1 dialog = prgm_out_rules_2_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_2_output_limit_1 dialog = prgm_out_rules_3_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_3_output_limit_1 dialog = prgm_out_rules_4_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_4_output_limit_1 dialog = prgm_out_rules_5_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_5_output_limit_1 dialog = prgm_out_rules_6_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_6_output_limit_1 dialog = prgm_out_rules_7_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_7_output_limit_1 dialog = prgm_out_rules_8_output_limit, "Limit time active", yAxis field = "#Set 0.0 to disable the limit" panel = prgm_out_rules_8_output_limit_1 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_1_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_2_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_3_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_4_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_5_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_6_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_7_output_limit 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 = "#Set 0.0 to disable the delay" 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 panel = prgm_out_rules_8_output_limit 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 = onboard_log_basic_setup, "Log Configuration" field = "Logger type", onboard_log_file_style ;field = "CSV separator", onboard_log_csv_separator {onboard_log_file_style == 1} field = "Log rate", onboard_log_file_rate, {onboard_log_file_style} field = "!Warning: Clicking the below button will erase all data from SD card" commandButton = "Format SD card", cmdFormatSD, { onboard_log_file_style } ;commandButton = "Format SD card", cmdVSSratio1, { onboard_log_file_style } ;field = "Filename", onboard_log_filenaming {onboard_log_file_style} ; field = "Storage", onboard_log_storage {onboard_log_file_style} dialog = onboard_log_trigger_boot, "On boot" field = "On Boot", onboard_log_trigger_boot, {onboard_log_file_style} field = "On Boot log duration", onboard_log_tr1_duration, {onboard_log_file_style && onboard_log_trigger_boot} dialog = onboard_log_trigger_RPM, "RPM" field = "RPM", onboard_log_trigger_RPM {onboard_log_file_style && !onboard_log_trigger_boot} field = "ON (Min RPM)", onboard_log_tr2_thr_on {onboard_log_file_style && onboard_log_trigger_RPM} field = "OFF (Max RPM)", onboard_log_tr2_thr_off {onboard_log_file_style && onboard_log_trigger_RPM} dialog = onboard_log_trigger_prot, "Engine protection" field = "Engine protection", onboard_log_trigger_prot {onboard_log_file_style && !onboard_log_trigger_boot} dialog = onboard_log_trigger_Epin, "External Switch" field = "Board pin", onboard_log_trigger_Epin {onboard_log_file_style && !onboard_log_trigger_boot} field = "Pin number", onboard_log_tr5_Epin_pin {onboard_log_file_style && onboard_log_trigger_Epin} ; field = "RPM", onboard_log_tr3_thr_RPM {onboard_log_file_style && onboard_log_trigger_prot} ; field = "MAP", onboard_log_tr3_thr_MAP {onboard_log_file_style && onboard_log_trigger_prot} ; field = "Oil", onboard_log_tr3_thr_Oil {onboard_log_file_style && onboard_log_trigger_prot} ; field = "AFR", onboard_log_tr3_thr_AFR {onboard_log_file_style && onboard_log_trigger_prot} ; dialog = onboard_log_trigger_Vbat, "Battery voltage" ; field = "Battery voltage", onboard_log_trigger_Vbat {onboard_log_file_style&& !onboard_log_trigger_boot} ; field = "ON threshold", onboard_log_tr4_thr_on {onboard_log_file_style && onboard_log_trigger_Vbat} ; field = "OFF threshold", onboard_log_tr4_thr_off {onboard_log_file_style && onboard_log_trigger_Vbat} dialog = rtc_settings, "Real Time Clock" field = "Mode", rtc_mode panel = std_ms3Rtc {rtc_mode} dialog = onboard_log_trigger, "Triggers" panel = onboard_log_trigger_boot ;field = "Above RPM", onboard_log_trigger_RPM panel = onboard_log_trigger_RPM panel = onboard_log_trigger_prot panel = onboard_log_trigger_Epin ;field = "With battery", onboard_log_trigger_Vbat dialog = onboard_log_setup, "On-board logger", border panel = onboard_log_basic_setup, North panel = onboard_log_trigger, South ; dialog = sdcard_datalog, "SD Card Datalogging", yAxis ; panel = sdcard_top ; panel = dataLogFieldSelector ;------------------------------------------------------------------------------- ; 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 = "
" text = "
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" cmdtestinj1Pulsed = "E\x02\x03" cmdtestinj2on = "E\x02\x04" cmdtestinj2off = "E\x02\x05" cmdtestinj2Pulsed = "E\x02\x06" cmdtestinj3on = "E\x02\x07" cmdtestinj3off = "E\x02\x08" cmdtestinj3Pulsed = "E\x02\x09" cmdtestinj4on = "E\x02\x0A" cmdtestinj4off = "E\x02\x0B" cmdtestinj4Pulsed = "E\x02\x0C" cmdtestinj5on = "E\x02\x0D" cmdtestinj5off = "E\x02\x0E" cmdtestinj5Pulsed = "E\x02\x0F" cmdtestinj6on = "E\x02\x10" cmdtestinj6off = "E\x02\x11" cmdtestinj6Pulsed = "E\x02\x12" cmdtestinj7on = "E\x02\x13" cmdtestinj7off = "E\x02\x14" cmdtestinj7Pulsed = "E\x02\x15" cmdtestinj8on = "E\x02\x16" cmdtestinj8off = "E\x02\x17" cmdtestinj8Pulsed = "E\x02\x18" cmdtestspk1on = "E\x03\x01" cmdtestspk1off = "E\x03\x02" cmdtestspk1Pulsed = "E\x03\x03" cmdtestspk2on = "E\x03\x04" cmdtestspk2off = "E\x03\x05" cmdtestspk2Pulsed = "E\x03\x06" cmdtestspk3on = "E\x03\x07" cmdtestspk3off = "E\x03\x08" cmdtestspk3Pulsed = "E\x03\x09" cmdtestspk4on = "E\x03\x0A" cmdtestspk4off = "E\x03\x0B" cmdtestspk4Pulsed = "E\x03\x0C" cmdtestspk5on = "E\x03\x0D" cmdtestspk5off = "E\x03\x0E" cmdtestspk5Pulsed = "E\x03\x0F" cmdtestspk6on = "E\x03\x10" cmdtestspk6off = "E\x03\x11" cmdtestspk6Pulsed = "E\x03\x12" cmdtestspk7on = "E\x03\x13" cmdtestspk7off = "E\x03\x14" cmdtestspk7Pulsed = "E\x03\x15" cmdtestspk8on = "E\x03\x16" cmdtestspk8off = "E\x03\x17" cmdtestspk8Pulsed = "E\x03\x18" cmdstm32reboot = "E\x32\x00" cmdstm32bootloader ="E\x32\x01" cmdFormatSD = "E\x33\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" [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 timing 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" topicHelp = "http://wiki.speeduino.com/en/configuration/Barometric_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" #if CELSIUS xAxis = 0, 125, 5 #else xAxis = 32, 257, 5 #endif 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 ; PWM Fan duty curve based on temp input curve = pwm_fan_curve, "Fan PWM Duty" columnLabel = "Temp", "Duty %" xAxis = -40, 215, 4 yAxis = 0, 100, 4 xBins = fanPWMBins, coolant yBins = PWMFanDuty gauge = cltGauge size = 400, 400 ; 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 = "Ignition load", "SplitDegrees" yAxis = 0, 40, 4 xBins = rotarySplitBins, ignLoad xAxis = 0, { ignLoadMax }, 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 ; 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 ; 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" xAxis = 0, 8000, 9 #if pressure_bar yAxis = 0, 10.0, 3 #else yAxis = 0, 150, 3 #endif xBins = oilPressureProtRPM, rpm yBins = oilPressureProtMins size = 400, 200 ; Coolant protection curve curve = coolant_prot_curve, "Coolant Temperature Protection" columnLabel = "Coolant", "Limit" #if CELSIUS xAxis = -40, 140, 5 #else xAxis = -40, 315, 5 #endif yAxis = 0, 8000, 3 xBins = coolantProtTemp, coolant yBins = coolantProtRPM size = 200, 200 ; Rolling engine protection curve curve = rolling_prot_curve, "Rolling Cut Percent" columnLabel = "RPM Delta", "Event Cut" xAxis = -300, 0, 6 yAxis = 0, 125, 6 xBins = rollingProtRPMDelta yBins = rollingProtCutPercent size = 200, 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://wiki.speeduino.com/en/configuration/VE_table" 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://wiki.speeduino.com/en/configuration/VE_table#secondary-fuel-table" 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, ignLoad2 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 table = lambdaTable1Tbl, lambdaTable1Map, "Lambda Table", 5 xBins = rpmBinsAFR, rpm yBins = loadBinsAFR, fuelLoad zBins = lambdaTable 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", 7 xBins = rpmBinsBoost, rpm yBins = tpsBinsBoost, throttle zBins = boostTable gridHeight = 3.0 upDownLabel = "HIGHER", "LOWER" table = boostDCLupTbl, boostDutyLookup, "Base duty for closed loop", 7 xBins = rpmBinsDutyLookup, rpm yBins = loadBinsDutyLookup, boostTarget zBins = boostTableDutyLookup gridHeight = 3.0 upDownLabel = "HIGHER", "LOWER" table = vvtTbl, vvtMap, "VVT control Table", 7 xBins = rpmBinsVVT, rpm ;yBins = tpsBinsVVT, throttle yBins = loadBinsVVT, vvtLoad zBins = vvtTable xyLabels = "RPM", "VVT Load: " gridHeight = 3.0 upDownLabel = "HIGHER", "LOWER" table = vvt2Tbl, vvt2Map, "VVT2 control Table", 12 xBins = rpmBinsVVT2, rpm ;yBins = tpsBinsVVT, throttle yBins = loadBinsVVT2, vvtLoad zBins = vvt2Table xyLabels = "RPM", "VVT Load: " gridHeight = 3.0 upDownLabel = "HIGHER", "LOWER" table = wmiTbl, wmiMapMap, "WMI control Table", 12 xBins = rpmBinsWMI, rpm yBins = mapBinsWMI, map zBins = wmiTable xyLabels = "RPM", "WMI Load: " gridHeight = 3.0 upDownLabel = "HIGHER", "LOWER" table = stagingTbl, stagingMap, "Fuel Staging Table", 7 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", 8 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", 8 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", 8 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", 8 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", 8 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", 8 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", 8 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", 8 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", 12 xBins = rpmBinsDwell, rpm yBins = loadBinsDwell, ignLoad 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, "VE (Current)", "%", 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, "Advance (Current)", "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, "Dwell (Requested)", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3 dwellActualGauge = dwellActual, "Dwell (Measured)", "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 / 14.7 * stoich}, {13 / 14.7 * stoich}, {15 / 14.7 * stoich}, {16 / 14.7 * stoich}, 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 Load", { bitStringValue( idleUnits , iacAlgorithm ) }, 0, {(iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6) ? 100: iacStepHome}, 0, 0, 2000, 2000, 0, 0 FANdutyCycleGauge = fanDuty, "FAN Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1 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, 1, 1 vvt1AngleGauge = vvt1Angle, "VVT Angle", "deg", -20, 100, 0, -5, 70, 90, 1, 1 vvt2DutyCycleGauge= vvt2Duty, "VVT2 Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1 vvt2TargetGauge = vvt2Target, "VVT2 Target Angle", "deg", 0, 100, 15, 25, 65, 75, 1, 1 vvt2AngleGauge = vvt2Angle, "VVT2 Angle", "deg", -20, 100, 0, -5, 70, 90, 1, 1 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 emapGauge = emap, "Exhaust MAP", "kPa", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0 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, 1, 1 afrGauge = afr, "Air:Fuel Ratio", "", 7, 25, {12 / 14.7 * stoich}, {13 / 14.7 * stoich}, {15 / 14.7 * stoich}, {16 / 14.7 * stoich}, 2, 2 afrGauge2 = afr2, "Air:Fuel Ratio 2", "", 7, 25, {12 / 14.7 * stoich}, {13 / 14.7 * stoich}, {15 / 14.7 * stoich}, {16 / 14.7 * stoich}, 2, 2 lambdaGauge = lambda, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 TPSdotGauge = TPSdot, "TPS DOT", "%/s", -1000, 1000, -2560, -2560, 2560, 2560, 0, 0 MAPdotGauge = MAPdot, "MAP DOT", "kPa/s", -1000, 1000, -2560, -2560, 2560, 2560, 0, 0 #if CELSIUS cltGauge = coolant, "Coolant Temp", "TEMP", -40, 120, -15, 0, 95, 105, 0, 0 iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 120, -15, 0, 95, 100, 0, 0 fuelTempGauge = fuelTemp, "Fuel Temp", "TEMP", -40, 120, -15, 0, 95, 100, 0, 0 #else cltGauge = coolant, "Coolant Temp", "TEMP", -40, 248, 0, 30, 200, 220, 0, 0 iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 248, 0, 30, 200, 210, 0, 0 fuelTempGauge = fuelTemp, "Fuel Temp", "TEMP", -40, 248, 0, 30, 200, 210, 0, 0 #endif flexGauge = flex, "Flex sensor", "%", 0, 100, -1, -1, 999, 999, 0, 0 fuelPressureGauge = fuelPressure, "Fuel Pressure (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0 oilPressureGauge = oilPressure, "Oil Pressure (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0 fuelPressureBarGauge = fuelPressure_bar,"Fuel Pressure (BAR)", "BAR", -1.0, 7.0, 0.5, 1.4, 14.0, 17.0, 1, 1 oilPressureBarGauge = oilPressure_bar, "Oil Pressure (BAR)", "BAR", -1.0, 7.0, 0.5, 1.4, 14.0, 17.0, 1, 1 fuelPressurekPaGauge = fuelPressure_kpa,"Fuel Pressure (kPa)", "kPa", -100, 700, 50, 140, 1400, 1700, 0, 0 oilPressurekPaGauge = oilPressure_kpa, "Oil Pressure (kPa)", "kPa", -100, 700, 50, 140, 1400, 1700, 0, 0 gaugeCategory = "Auxiliary 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, 5000, 750, 900, 100000, 100000, 0, 0 loopsPerRevGauge = loopsPerRev, "Main loops per revolution", "Loops/rev", 0, 100, 10, 15, 10000, 10000, 2, 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 indicator = { burnPending }, "EEPROM Burn", "EEPROM Burn", 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 = { engineProtectCoolant }, "Coolant Protect OFF","Coolant Protect ON",white, black, red, black indicator = { wmiEmptyBit }, "WMI Tank NOT Empty", "WMI Tank Empty", white, black, red, black indicator = { vvt1Error }, "VVT1 Ok", "VVT1 Error", white, black, red, black indicator = { vvt2Error }, "VVT2 Ok", "VVT2 Error", white, black, red, black indicator = { fanStatus }, "Fan OFF", "Fan ON", white, black, red, black indicator = { idleControlOn }, "Idle OFF", "Idle ON", white, black, green, black indicator = { (batteryVoltage < batlow) || (batteryVoltage > bathigh) }, "Battery Voltage OK", "Battery Voltage Warning", 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 ;AC stuff indicator = { airConRequest }, "A/C Request OFF", "A/C Request ON", white, black, green, black indicator = { airConCompressor }, "A/C Comp OFF", "A/C Comp ON", white, black, green, black indicator = { airConFanStatus }, "A/C Fan OFF", "A/C Fan ON", white, black, green, black ;sd card indicators indicator = { sd_status & 1}, "No SD Card", "SD Present", white, black, green, black indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black indicator = { sd_status & 8}, "SD Off", "SD Logging", white, black, green, black indicator = { sd_status & 16},"SD OK", "SD Error", white, black, red, 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 = 127 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, S16, 22, "%/s", 1.000, 0.000 advance = scalar, S08, 24, "deg", 1.000, 0.000 tps = scalar, U08, 25, "%", 0.500, 0.000 loopsPerSecond = scalar, U16, 26, "loops", 1.000, 0.000 freeRAM = scalar, U16, 28, "bytes", 1.000, 0.000 boostTarget = scalar, U08, 30, "kPa", 2.000, 0.000 boostDuty = scalar, U08, 31, "%", 1.000, 0.000 status2 = scalar, U08, 32, "bits", 1.000, 0.000 launchHard = bits, U08, 32, [0:0] launchSoft = bits, U08, 32, [1:1] hardLimitOn = bits, U08, 32, [2:2] softlimitOn = bits, U08, 32, [3:3] boostCutSpark = bits, U08, 32, [4:4] error = bits, U08, 32, [5:5] idleControlOn = bits, U08, 32, [6:6] sync = bits, U08, 32, [7:7] rpmDOT = scalar, S16, 33, "rpm/s", 1.000, 0.000 flex = scalar, U08, 35, "%", 1.000, 0.000 flexFuelCor = scalar, U08, 36, "%", 1.000, 0.000 flexIgnCor = scalar, S08, 37, "deg", 1.000, 0.000 idleLoad = scalar, U08, 38, { 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, 39, "bits", 1.000, 0.000 testenabled = bits, U08, 39, [0:0] testactive = bits, U08, 39, [1:1] afr2 = scalar, U08, 40, "O2", 0.100, 0.000 baro = scalar, U08, 41, "kpa", 1.000, 0.000 auxin_gauge0 = scalar, U16, 42, "", 1.000, 0.000 auxin_gauge1 = scalar, U16, 44, "", 1.000, 0.000 auxin_gauge2 = scalar, U16, 46, "", 1.000, 0.000 auxin_gauge3 = scalar, U16, 48, "", 1.000, 0.000 auxin_gauge4 = scalar, U16, 50, "", 1.000, 0.000 auxin_gauge5 = scalar, U16, 52, "", 1.000, 0.000 auxin_gauge6 = scalar, U16, 54, "", 1.000, 0.000 auxin_gauge7 = scalar, U16, 56, "", 1.000, 0.000 auxin_gauge8 = scalar, U16, 58, "", 1.000, 0.000 auxin_gauge9 = scalar, U16, 60, "", 1.000, 0.000 auxin_gauge10 = scalar, U16, 62, "", 1.000, 0.000 auxin_gauge11 = scalar, U16, 64, "", 1.000, 0.000 auxin_gauge12 = scalar, U16, 66, "", 1.000, 0.000 auxin_gauge13 = scalar, U16, 68, "", 1.000, 0.000 auxin_gauge14 = scalar, U16, 70, "", 1.000, 0.000 auxin_gauge15 = scalar, U16, 72, "", 1.000, 0.000 tpsADC = scalar, U08, 74, "ADC", 1.000, 0.000 errors = scalar, U08, 75, "bits", 1.000, 0.000 errorNum = bits, U08, 75, [0:1] currentError = bits, U08, 75, [2:7] pulseWidth = scalar, U16, 76, "ms", 0.001, 0.000 pulseWidth2 = scalar, U16, 78, "ms", 0.001, 0.000 pulseWidth3 = scalar, U16, 80, "ms", 0.001, 0.000 pulseWidth4 = scalar, U16, 82, "ms", 0.001, 0.000 status3 = scalar, U08, 84, "bits", 1.000, 0.000 resetLockOn = bits, U08, 84, [0:0] nitrousOn = bits, U08, 84, [1:1] fuel2Active = bits, U08, 84, [2:2] vssRefresh = bits, U08, 84, [3:3] halfSync = bits, U08, 84, [4:4] nSquirts = bits, U08, 84, [5:7] engineProtectStatus = scalar, U08, 85, "bits", 1.000, 0.000 engineProtectRPM = bits, U08, 85, [0:0] engineProtectMAP = bits, U08, 85, [1:1] engineProtectOil = bits, U08, 85, [2:2] engineProtectAFR = bits, U08, 85, [3:3] engineProtectCoolant = bits, U08, 85, [4:4] engineProtectOth = bits, U08, 85, [5:6] ; Unused for now IOError = bits, U08, 85, [7:7] fuelLoad = scalar, S16, 86, { bitStringValue( algorithmUnits , algorithm ) }, {fuelLoadFeedBack}, 0.000 ignLoad = scalar, S16, 88, { bitStringValue( algorithmUnits , ignAlgorithm ) }, {ignLoadFeedBack}, 0.000 dwell = scalar, U16, 90, "ms", 0.001, 0.000 CLIdleTarget = scalar, U08, 92, "RPM", 10.00, 0.000 MAPdot = scalar, S16, 93, "kPa/s", 1.000, 0.000 vvt1Angle = scalar, S16, 95, "deg", 0.50, 0.000 vvt1Target = scalar, U08, 97, "deg", 0.50, 0.000 vvt1Duty = scalar, U08, 98, "%", 0.50, 0.000 flexBoostCor = scalar, S16, 99, "kPa", 1.000, 0.000 baroCorrection = scalar, U08, 101, "%", 1.000, 0.000 veCurr = scalar, U08, 102, "%", 1.000, 0.000 ASECurr = scalar, U08, 103, "%", 1.000, 0.000 vss = scalar, U16, 104, "km/h", 1.000, 0.000 gear = scalar, U08, 106, "", 1.000, 0.000 fuelPressure = scalar, U08, 107, "PSI", 1.000, 0.000 oilPressure = scalar, U08, 108, "PSI", 1.000, 0.000 wmiPW = scalar, U08, 109, "%", 1.000, 0.000 status4 = scalar, U08, 110, "bits", 1.000, 0.000 wmiEmptyBit = bits, U08, 110, [0:0] vvt1Error = bits, U08, 110, [1:1] vvt2Error = bits, U08, 110, [2:2] fanStatus = bits, U08, 110, [3:3] burnPending = bits, U08, 110, [4:4] stagingActive = bits, U08, 110, [5:5] UnusedBits4 = bits, U08, 110, [6:7] vvt2Angle = scalar, S16, 111, "deg", 0.50, 0.000 vvt2Target = scalar, U08, 113, "deg", 0.50, 0.000 vvt2Duty = scalar, U08, 114, "%", 0.50, 0.000 outputsStatus0 = bits, U08, 115, [0:0] outputsStatus1 = bits, U08, 115, [1:1] outputsStatus2 = bits, U08, 115, [2:2] outputsStatus3 = bits, U08, 115, [3:3] outputsStatus4 = bits, U08, 115, [4:4] outputsStatus5 = bits, U08, 115, [5:5] outputsStatus6 = bits, U08, 115, [6:6] outputsStatus7 = bits, U08, 115, [7:7] fuelTempRaw = scalar, U08, 116, "°C", 1.000, 0.000 fuelTempCor = scalar, U08, 117, "%", 1.000, 0.000 advance1 = scalar, S08, 118, "deg", 1.000, 0.000 advance2 = scalar, S08, 119, "deg", 1.000, 0.000 sd_status = scalar, U08, 120, "", 1.0, 0.0 emap = scalar, U16, 121, "kpa", 1.000, 0.000 fanDuty = scalar, U08, 123, "%", 0.5, 0.000 airConStatus = scalar, U08, 124, "bits", 1.000, 0.000 airConRequest = bits, U08, 124, [0:0] airConCompressor = bits, U08, 124, [1:1] airConRPMMLockout = bits, U08, 124, [2:2] airConTPSLockout = bits, U08, 124, [3:3] airConTurningOn = bits, U08, 124, [4:4] airConCLTLockout = bits, U08, 124, [5:5] airConFanStatus = bits, U08, 124, [6:6] airConUnusedBits = bits, U08, 124, [7:7] dwellActual = scalar, U16, 125, "ms", 0.001, 0.000 ;sd_filenum = scalar, U16, 125, "", 1, 0 ;sd_error = scalar, U08, 127, "", 1, 0 ;sd_phase = scalar, U08, 128, "", 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 } fuelPressure_bar = { fuelPressure * 0.06894757 } oilPressure_bar = { oilPressure * 0.06894757 } fuelPressure_kpa = { fuelPressure * 6.894757 } oilPressure_kpa = { oilPressure * 6.894757 } 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 = { rpm ? loopsPerSecond / (rpm / 60) : 0 } 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.0 } ignLoadMax = { (ignAlgorithm == 0 || ignAlgorithm == 2) ? 511 : 100.0 } fuel2LoadMax = { (fuel2Algorithm == 0 || fuel2Algorithm == 2) ? 511 : 100.0 } ign2LoadMax = { (spark2Algorithm == 0 || spark2Algorithm == 2) ? 511 : 100.0 } ign2ValuesMin = { (spark2Mode == 1) ? 0 : -40 } ign2ValuesMax = { (spark2Mode == 1) ? 215 : 70 } fuelLoad2 = { fuel2Algorithm == 0 ? map : fuel2Algorithm == 1 ? tps : fuel2Algorithm == 2 ? 0 : 0 } ignLoad2 = { spark2Algorithm == 0 ? map : spark2Algorithm == 1 ? tps : spark2Algorithm == 2 ? 0 : ignLoad } vvtLoad = { (vvtLoadSource == 0) ? map : tps } vvtLoadMax = { (vvtLoadSource == 0) ? 511 : 100.0 } wmiLoadMax = { (wmiMode == 2) ? 100.0 : 255 } ;Select data resolution and scale based on algorithm used idleRes = { (iacAlgorithm == 5 || iacAlgorithm == 7) ? 3.0 : 1.0 } idleResMax = { (iacAlgorithm == 5 || iacAlgorithm == 7) ? (iacStepHome-3) : 100.0 } vvtLoadRes = { (vvtLoadSource == 0) ? 2.000 : 0.500 } wmiLoadRes = { (wmiMode >= 2) ? 0.5 : 1.0 } fuelLoadRes = { ((algorithm == 0) || (algorithm == 2)) ? 2.000 : 0.500 } ignLoadRes = { ((ignAlgorithm == 0) || (ignAlgorithm == 2)) ? 2.000 : 0.500 } fuelLoadFeedBack = { ((algorithm == 0) || (algorithm == 2)) ? 1.000 : 0.250 } ignLoadFeedBack = { ((ignAlgorithm == 0) || (ignAlgorithm == 2)) ? 1.000 : 0.250 } fuel2LoadRes = { ((fuel2Algorithm == 0) || (fuel2Algorithm == 2)) ? 2.000 : 0.500 } ign2LoadRes = { ((spark2Algorithm == 0) || (spark2Algorithm == 2)) ? 2.000 : 0.500 } vvtDecimalRes= { (vvtLoadSource == 0) ? 0 : 1 } fuelDecimalRes= { ((algorithm == 0) || (algorithm == 2)) ? 0 : 1 } ignDecimalRes= { ((ignAlgorithm == 0) || (ignAlgorithm == 2)) ? 0 : 1 } fuel2DecimalRes= { ((fuel2Algorithm == 0) || (fuel2Algorithm == 2)) ? 0 : 1 } ign2DecimalRes= { ((spark2Algorithm == 0) || (spark2Algorithm == 2)) ? 0 : 1 } boostTableLimit = { boostType == 0 ? 100.0 : 511 } ;The maximum value allowed in the boost table. 100 is used for duty cycle, 511 for kpa CLIdleDelta = { CLIdleTarget - rpm } syncStatus = { halfSync + (sync << 1) } #if mcu_teensy CANisAvailable = { ( (enable_secondarySerial && (secondarySerialProtocol == 2)) || (enable_intcan)) } #elif mcu_stm32 CANisAvailable = { ( (enable_secondarySerial && (secondarySerialProtocol == 2)) || (enable_intcan)) } #else CANisAvailable = { (enable_secondarySerial && (secondarySerialProtocol == 2)) } #endif ;------------------------------------------------------------------------------- [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", float, "%.1f" 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, "VE (Current)", int, "%d" entry = VE1, "VE1", int, "%d" entry = VE2, "VE2", int, "%d" entry = pulseWidth, "PW", float, "%.3f" entry = pulseWidth2, "PW2", float, "%.3f" entry = pulseWidth3, "PW3", float, "%.3f" entry = pulseWidth4, "PW4", float, "%.3f" entry = afrTarget, "AFR Target", float, "%.3f" entry = lambdaTarget, "Lambda Target", float, "%.3f" entry = dutyCycle, "Duty Cycle", float, "%.1f" entry = stgDutyCycle, "Duty Cycle (Staging)",float, "%.1f" entry = TPSdot, "TPS DOT", int, "%d", { aeMode == 0 } entry = advance, "Advance (Current)",int, "%d" entry = dwell, "Dwell", float, "%.3f" entry = dwellActual, "Dwell (Measured)", float, "%.3f", { perToothIgn } 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 || iacAlgorithm == 7 || 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 || iacAlgorithm == 7 || 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 = fanStatus, "Fan", int, "%d" entry = syncLossCounter, "Sync Loss #", int, "%d" entry = vvt1Angle, "VVT1 Angle", int, "%.1f", { vvtEnabled > 0 } entry = vvt1Target, "VVT1 Target Angle",int, "%.1f", { vvtEnabled > 0 && vvtMode == 2 } ;;Only show when using close loop vvt entry = vvt1Duty, "VVT1 Duty", int, "%.1f", { 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, "VVT2 Angle", int, "%.1f", { vvt2Enabled > 0 } entry = vvt2Target, "VVT2 Target Angle",int, "%.1f", { vvt2Enabled > 0 && vvtMode == 2 } ;;Only show when using close loop vvt entry = vvt2Duty, "VVT2 Duty", int, "%.1f", { vvt2Enabled > 0 && vvtMode == 2 } entry = fanDuty, "FAN Duty", int, "%.1f", { fanEnable == 2 } entry = loopsPerSecond, "Loops/s", int, "%d" entry = loopsPerRev, "Loops/rev", int, "%.2f" entry = wmiPW, "WMI Duty Cycle", int, "%d", { wmiEnabled == 1 } entry = MAPdot, "MAP DOT", int, "%d", { aeMode == 1 } 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" entry = emap, "EMAP", int, "%d", { useEMAP } entry = fuelLoad, "FuelLoad", float, "%.1f" entry = ignLoad, "IgnitionLoad", float, "%.1f" entry = syncStatus, "Sync status", int, "%d" entry = engineProtectRPM, "Engine Prot. RPM", int, "onOff", { engineProtectType } entry = engineProtectMAP, "Engine Prot. MAP", int, "onOff", { engineProtectType && boostCutEnabled } entry = engineProtectOil, "Engine Prot. Oil Pressure", int, "onOff", { engineProtectType && oilPressureProtEnbl && oilPressureEnable } entry = engineProtectAFR, "Engine Prot. AFR", int, "onOff", { engineProtectType && afrProtectEnabled && (egoType == 2) } entry = engineProtectCoolant, "Engine Prot. CLT", int, "onOff", { engineProtectType } [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 (TOOTH_LOG_SIZE) ;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 = 5000 ; time in ms dataReadyCondition = { toothLog1Ready == 1 } continuousRead = true dataLength = 127 ; Number of records to show on a single screen. Should match TOOTH_LOG_SIZE in the code ;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 = ThirdLevel, "ThirdLevel", 2, 1, 1.0, "Flag" recordField = trigger, "Trigger", 3, 1, 1.0, "Flag" recordField = sync, "Sync", 4, 1, 1.0, "Flag" recordField = cycle, "Cycle", 5, 1, 1.0, "Flag" recordField = refTime, "RefTime", 8, 32, 0.001, "ms" ; hidden calcField serves as intermediate variable calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }, hidden calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) } ;recordField = time, "Time", 24, 16, 1.0, "ms" calcField = time, "Time", "ms", { refTime } loggerDef = compositeLogger2, "Composite Logger 2nd Cam", composite startCommand = "O" stopCommand = "o" ;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 = 127 ; Number of records to show on a single screen. Should match TOOTH_LOG_SIZE in the code ;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 = ThirdLevel, "ThirdLevel", 2, 1, 1.0, "Flag" recordField = trigger, "Trigger", 3, 1, 1.0, "Flag" recordField = sync, "Sync", 4, 1, 1.0, "Flag" recordField = cycle, "Cycle", 5, 1, 1.0, "Flag" recordField = refTime, "RefTime", 8, 32, 0.001, "ms" ; hidden calcField serves as intermediate variable calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }, hidden calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) } ;recordField = time, "Time", 24, 16, 1.0, "ms" calcField = time, "Time", "ms", { refTime } loggerDef = compositeLogger3, "Composite Logger Both cams", composite startCommand = "X" stopCommand = "x" ;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 = 127 ; Number of records to show on a single screen. Should match TOOTH_LOG_SIZE in the code ;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 = ThirdLevel, "ThirdLevel", 2, 1, 1.0, "Flag" recordField = trigger, "Trigger", 3, 1, 1.0, "Flag" recordField = sync, "Sync", 4, 1, 1.0, "Flag" recordField = cycle, "Cycle", 5, 1, 1.0, "Flag" recordField = refTime, "RefTime", 8, 32, 0.001, "ms" ; hidden calcField serves as intermediate variable calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }, hidden calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) } ;recordField = time, "Time", 24, 16, 1.0, "ms" calcField = time, "Time", "ms", { refTime } [ReferenceTables] tableWriteCommand = "t\$tsCanId%2i%2o%2c%v"; "t%2i%2o%2c%v"; "t\x01\xFC\x00\x01\xFC" "t\%2i%2o%2c%v" #if mcu_stm32 tableBlockingFactor = 64 #else tableBlockingFactor = 256 #endif #if COMMS_COMPAT tableBlockingFactor = 64 #endif referenceTable = std_ms2gentherm, "Calibrate Thermistor Tables." topicHelp = "http://wiki.speeduino.com/en/configuration/Sensor_Calibration" tableIdentifier = 000, "Coolant Temperature Sensor", 001, "Air 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 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 ; The AFR Table Generator does not work with the lambda target table ;addTool = afrTableGenerator, "AFR Table Generator", lambdaTable1Tbl [VeAnalyze] ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition #if LAMBDA veAnalyzeMap = veTable1Tbl, lambdaTable1Tbl, lambda, egoCorrection lambdaTargetTables = lambdaTable1Tbl, afrTSCustom #else veAnalyzeMap = veTable1Tbl, afrTable1Tbl, afr, egoCorrection lambdaTargetTables = afrTable1Tbl, afrTSCustom #endif 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, lambdaTable1Tbl, lambda, coolant, warmupEnrich, egoCorrection lambdaTargetTables = lambdaTable1Tbl, afrTSCustom #else wueAnalyzeMap = warmup_analyzer_curve, warmup_afr_curve, afrTable1Tbl, afr, coolant, warmupEnrich, egoCorrection lambdaTargetTables = afrTable1Tbl, afrTSCustom #endif 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.