• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

PJSC(Pump Jet Solenoid Controller)はArduinoを使用したバイク用燃料噴射コントローラです。このプロジェクトは、オープンソースECUプロジェクト『Speeduino』をベースにしています。


Commit MetaInfo

Revision89 (tree)
Time2020-04-07 11:48:39
Authormaharu

Log Message

NSR250Rおよび、Suzuki カタナ用トリガーデコーダー追加

Change Summary

Incremental Difference

--- branches/Ver1.02/reference/PJSC.ini (nonexistent)
+++ branches/Ver1.02/reference/PJSC.ini (revision 89)
@@ -0,0 +1,4232 @@
1+;-------------------------------------------------------------------------------
2+#unset CAN_COMMANDS
3+#unset enablehardware_test
4+
5+[MegaTune]
6+ MTversion = 2.25
7+
8+ queryCommand = "Q"
9+;[PJSC v1.01] signature = "speeduino 201902"
10+ signature = "speeduino - PJSC v1.01" ;[PJSC v1.01]
11+ versionInfo = "S" ;This info is what is displayed to user
12+
13+[TunerStudio]
14+ iniSpecVersion = 3.51
15+
16+;-------------------------------------------------------------------------------
17+
18+[SettingGroups]
19+ ; the referenceName will over-ride previous, so if you are creating a
20+ ; settingGroup with a reference name of lambdaSensor, it will replace the
21+ ; setting group defined in the settingGroups.xml of the TunerStudio config
22+ ; folder. If is is an undefined referenceName, it will be added.
23+ ; keyword = referenceName, DisplayName
24+
25+ ;settingGroup = boostUnits, "Boost table units"
26+ ;settingOption = DEFAULT, "kPa"
27+ ;settingOption = BOOSTPSI, "PSI"
28+ settingGroup = enablehardware_test, "Enable Hardware Test Page"
29+
30+ settingGroup = resetcontrol_group, "Reset Control Features"
31+ settingOption = resetcontrol_standard, "Basic Options Only"
32+ settingOption = resetcontrol_adv, "Advanced Features (16u2 Firmware Update Required)"
33+
34+ settingGroup = table4_usage_group, "Selection of table4 usage" ;[PJSC v1.01] For switching 4th table
35+;[PJSC v1.01]For debug settingOption = table4_spark, "Spark advance table" ;[PJSC v1.01] For switching 4th table
36+ settingOption = table4_fuel, "VE table4" ;[PJSC v1.01] For switching 4th table
37+
38+[PcVariables]
39+ ; valid types: boolean, double, int, list
40+ ;
41+ ; no offset as they are local variables.
42+ ; entry format the same as Constants, except there is no offset.
43+ ; arrays are not yet supported.
44+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
45+ ; name = type, min, max;
46+ ;
47+ ; type List: value will be index.
48+ 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"
49+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
50+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
51+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
52+
53+ idleUnits = bits, U08, [0:2], "None", "On/Off", "Duty Cycle", "Duty Cycle", "Steps", "Steps"
54+
55+
56+ #define loadSourceNames = "MAP", "TPS", "IMAP/EMAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
57+ #define loadSourceUnits = "kPa", "% TPS", "%", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
58+ algorithmNames = bits, U08, [0:2], $loadSourceNames
59+ ;algorithmUnits = bits, U08, [0:2], $loadSourceUnits
60+ algorithmUnits = bits, U08, [0:2], "kPa", "% TPS", "%", "% TPS", "INVALID", "INVALID", "INVALID", "INVALID"
61+ algorithmUnits2 = bits, U08, [3:5], "kPa", "% TPS", "%", "% TPS", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC v1.01] For Secondary Fuel
62+;[PJSC v1.01] algorithmUnits3 = bits, U08, [0:2], "kPa", "% TPS", "%", "% TPS", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC v1.01] For switching table3
63+ algorithmLimits= array, U16, [8], "", 1.0, 0, 0, 511, 0, noMsqSave
64+ #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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
65+ #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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
66+
67+ boostTableLabels = bits, U08, [0:1], "Duty Cycle %", "kPa"
68+
69+ fuelLoadMax = scalar, U08, "", 1, 0, 0, 511, 0
70+;[PJSC v1.01] ignLoadMax = scalar, U08, "", 1, 0, 0, 511, 0
71+;[PJSC v1.01] fuelLoadMax = scalar, U08, "", 1, 0, 0, 255, 0 ;[PJSC v1.01]
72+ ignLoadMax = scalar, U08, "", 1, 0, 0, 255, 0 ;[PJSC v1.01]
73+ AUXin00Alias = string, ASCII, 20
74+ AUXin01Alias = string, ASCII, 20
75+ AUXin02Alias = string, ASCII, 20
76+ AUXin03Alias = string, ASCII, 20
77+ AUXin04Alias = string, ASCII, 20
78+ AUXin05Alias = string, ASCII, 20
79+ AUXin06Alias = string, ASCII, 20
80+ AUXin07Alias = string, ASCII, 20
81+ AUXin08Alias = string, ASCII, 20
82+ AUXin09Alias = string, ASCII, 20
83+ AUXin10Alias = string, ASCII, 20
84+ AUXin11Alias = string, ASCII, 20
85+ AUXin12Alias = string, ASCII, 20
86+ AUXin13Alias = string, ASCII, 20
87+ AUXin14Alias = string, ASCII, 20
88+ AUXin15Alias = string, ASCII, 20
89+
90+ ;Define aliases for all the triggers. Naming pattern matches that used in decoders.ino
91+ #define trigger_missingTooth = 0
92+ #define trigger_BasicDistributor = 1
93+ #define trigger_DualWheel = 2
94+ #define trigger_GM7X = 3
95+ #define trigger_4G63 = 4
96+ #define trigger_24X = 5
97+ #define trigger_Jeep2000 = 6
98+ #define trigger_Audi135 = 7
99+ #define trigger_HondaD17 = 8
100+ #define trigger_Miata9905 = 9
101+ #define trigger_MazdaAU = 10
102+ #define trigger_non360 = 11
103+ #define trigger_Nissan360 = 12
104+ #define trigger_Subaru67 = 13
105+ #define trigger_Daihatsu = 14
106+ #define trigger_Harley = 15
107+ #define trigger_ThirtySixMinus222 = 16
108+
109+
110+[Constants]
111+
112+ ;----------------------------------------------------------------------------
113+ ; Constants Definition
114+ ; --------------------
115+ ;
116+ ; Scalar Values
117+ ; -------------
118+ ; The scaling and translation values are used as follows:
119+ ; msValue = userValue / scale - translate
120+ ; userValue = (msValue + translate) * scale
121+ ;
122+ ;
123+ ; Temperatures are fine, check out the Fielding IAC example (fastIdleT).
124+ ;
125+ ; Array Values
126+ ; ------------
127+ ; Arrays are specified just like scalars, except that they have a "shape"
128+ ; entry in the fourth parameter. The shape allows you to define lists or
129+ ; tables, for example [8] defines a list with eight values and [2x4] defines
130+ ; a table with eight values (two rows and four columns). Tables may be
131+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
132+ ; out like.
133+ ;
134+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
135+ ;
136+ ; Y-order would be
137+ ;
138+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
139+ ;
140+ ; To use the TableEditor, you must define two lists and a table, and
141+ ; the lengths of the lists must correspond to the shape of the table.
142+ ;
143+ ; Bit Fields
144+ ; ----------
145+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
146+ ; data word that stores bit fields must be unsigned.
147+ ;
148+ ; You need NOT supply the correct number of labels matching the
149+ ; number of bits you've specified (one bit requires 2 values, two
150+ ; bits requires 4 values and so on). If you neglect to supply enough
151+ ; labels, they will be synthesized using the sequence "1", "2" and so
152+ ; on based upon their position in the sequence (the cltType and matType
153+ ; will end up with identical lists).
154+ ;
155+ ; If you specify a label as "INVALID" (all upper case), then it will
156+ ; not be displayed in the combo box, so you can leave out values that
157+ ; make no sense.
158+ ;
159+ ;----------------------------------------------------------------------------
160+
161+ endianness = little
162+;[PJSC] nPages = 10
163+ ;pageSize = 288, 128, 288, 128, 288, 128, 240, 192, 192, 192
164+;[PJSC] pageSize = 128, 288, 288, 128, 288, 128, 240, 192, 192, 192
165+ nPages = 11 ;[PJSC]
166+ pageSize = 128, 288, 288, 128, 288, 128, 240, 192, 192, 288, 288 ;[PJSC v1.01]
167+
168+ ;burnCommand = "B"
169+ ;pageActivate = "P\001", "P\002", "P\003", "P\004", "P\005", "P\006", "P\007", "P\010", "P\011", "P\012", "P\013"
170+ ;pageReadCommand = "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V"
171+ ;pageValueWrite = "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%2o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v", "W%o%v"
172+
173+ ; New commands
174+ ;pageSize = 288, 128, 288, 128, 288, 128, 128, 160, 192, 192, 192
175+;[PJSC] pageIdentifier = "\$tsCanId\x01", "\$tsCanId\x02", "\$tsCanId\x03", "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x06", "\$tsCanId\x07", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0A"
176+;[PJSC] burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i"
177+;[PJSC] 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"
178+;[PJSC] pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
179+;[PJSC] pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
180+
181+ ;[PJSC] New commands for PJSC
182+ pageIdentifier = "\$tsCanId\x01", "\$tsCanId\x02", "\$tsCanId\x03", "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x06", "\$tsCanId\x07", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0A", "\$tsCanId\x0B" ;[PJSC v1.01]
183+ burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i" ;[PJSC v1.01]
184+ 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" ;[PJSC v1.01]
185+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v" ;[PJSC]
186+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v" ;[PJSC]
187+
188+ blockingFactor = 2048
189+ tableBlockingFactor = 2048
190+ delayAfterPortOpen=1000
191+ ;validateArrayBounds = true
192+ blockReadTimeout = 2000
193+ ;tsWriteBlocks = on
194+ interWriteDelay = 5 ;Ignored when tsWriteBlocks is on
195+ pageActivationDelay = 10
196+
197+;New for TS 3.0.08ish upwards, define lists of standard I/O options
198+
199+ #define PIN_OUT10inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
200+ #define PIN_OUT16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
201+ #define PIN_16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
202+
203+ #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
204+ #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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
205+ #define ANALOG_DIG_PIN_LIST = $DIGITAL_PIN, $ANALOG_PIN
206+ #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"
207+ #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"
208+ #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"
209+ #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"
210+ #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"
211+ #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"
212+ #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"
213+ #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"
214+ #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"
215+ #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"
216+ #define CAN_ADDRESS_HEX = $CAN_ADDRESS_HEX_01XX, $CAN_ADDRESS_HEX_02XX, $CAN_ADDRESS_HEX_03XX, $CAN_ADDRESS_HEX_04XX, $CAN_ADDRESS_HEX_05XX, $CAN_ADDRESS_HEX_06XX, $CAN_ADDRESS_HEX_07XX, $CAN_ADDRESS_HEX_inv255
217+
218+
219+;--------------------------------------------------
220+;Start Page 1
221+;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
222+;--------------------------------------------------
223+page = 1
224+ unused2-1 = scalar, S08, 0, "kPa", 1.0, 0.0, -127, 127, 0
225+ unused2-2 = scalar, U08, 1, "kPa", 1.0, 0.0, 0.0, 255, 0
226+ asePct = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 95.0, 0
227+ aseCount = scalar, U08, 3, "s", 1.0, 0.0, 0.0, 255, 0
228+ wueRates = array, U08, 4, [10], "%", 1.0, 0.0, 0.0, 255, 0
229+ crankingPct = scalar, U08, 14, "%", 1.0, 0.0, 0.0, 255, 0
230+;[PJSC] pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
231+ pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PJSC v1.0", "PJSC v0.2", "PJSC v0.3", "PJSC v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC] Boad ID: PJSC boad ver1.0/0.2/0.3 (2018/20/19)
232+ 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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
233+ tachoDiv = bits, U08, 16, [6:7], "Normal", "Half", "INVALID", "INVALID"
234+ unused2-17 = scalar, U08, 17, "ms", 0.1, 0.0, 0.0, 25.5, 1
235+ unused2-18 = scalar, U08, 18, "ms", 0.1, 0.0, 0.0, 25.5, 1
236+ tpsThresh = scalar, U08, 19, "%/s", 1.0, 0.0, 0.0, 255, 0
237+ taeTime = scalar, U08, 20, "ms", 10, 0.0, 0.0, 2550, 0
238+
239+ ; Display (Options for what the display is showing)
240+ display = bits, U08, 21, [0:2], "Unused", "Adafruit 128x32", "Generic 128x32", "Adafruit 128x64", "Generic 128x64", "INVALID", "INVALID", "INVALID"
241+ display1 = bits U08, 21, [3:5], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
242+ display2 = bits U08, 21, [6:7], "O2", "Voltage", "CPU", "Mem"
243+
244+ display3 = bits U08, 22, [0:2], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
245+ display4 = bits U08, 22, [3:4], "O2", "Voltage", "CPU", "Mem"
246+ display5 = bits U08, 22, [5:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
247+
248+ displayB1 = bits U08, 23, [0:3], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
249+ displayB2 = bits U08, 23, [4:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
250+
251+ reqFuel = scalar, U08, 24, "ms", 0.1, 0.0, 0.0, 25.5, 1
252+ divider = scalar, U08, 25, "", 1.0, 0.0
253+ alternate = bits, U08, 26, [0:0], "Simultaneous", "Alternating"
254+ multiplyMAP = bits, U08, 26, [1:1], "No", "Yes"
255+ includeAFR = bits, U08, 26, [2:2], "No", "Yes"
256+ hardCutType = bits, U08, 26, [3:3], "Full", "Rolling"
257+ ignAlgorithm = bits, U08, 26, [4:6], $loadSourceNames
258+ indInjAng = bits, U08, 26, [7:7], "Disabled", "Enabled"
259+;[PJSC v1.01] injOpen = scalar, U08, 27, "ms", 0.1, 0.0, 0.1, 25.5, 1
260+ injOpen = scalar, U08, 27, "ms", 0.01, 0.00, 0.01, 2.55, 2
261+ inj1Ang = scalar, U16, 28, "deg", 1.0, 0.0, 0.0, 360, 0
262+ inj2Ang = scalar, U16, 30, "deg", 1.0, 0.0, 0.0, 360, 0
263+ inj3Ang = scalar, U16, 32, "deg", 1.0, 0.0, 0.0, 360, 0
264+ inj4Ang = scalar, U16, 34, "deg", 1.0, 0.0, 0.0, 360, 0
265+
266+ ; Config1
267+ mapSample = bits, U08, 36, [0:1], "Instantaneous", "Cycle Average", "Cycle Minimum", "INVALID"
268+ twoStroke = bits, U08, 36, [2:2], "Four-stroke", "Two-stroke"
269+ injType = bits, U08, 36, [3:3], "Port", "Throttle Body"
270+ nCylinders = bits, U08, 36, [4:7], "INVALID","1","2","3","4","5","6","INVALID","8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
271+
272+ ; Config2
273+ algorithm = bits, U08, 37, [0:2], $loadSourceNames ;Has to be called algorithm for the req fuel calculator to work :(
274+ fixAngEnable = bits, U08, 37, [3:3], "Off", "On"
275+ nInjectors = bits, U08, 37, [4:7], "INVALID","1","2","3","4","5","6","INVALID","8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
276+
277+ ; Config3
278+ engineType = bits, U08, 38, [0:0], "Even fire", "Odd fire"
279+ flexEnabled = bits, U08, 38, [1:1], "Off", "On"
280+ unused2_38c = bits, U08, 38, [2:2], "Speed Density", "Alpha-N"
281+ baroCorr = bits, U08, 38, [3:3], "Off", "On"
282+ injLayout = bits, U08, 38, [4:5], "Paired", "Semi-Sequential", "INVALID", "Sequential"
283+ perToothIgn = bits, U08, 38, [6:6], "No", "Yes"
284+ dfcoEnabled = bits, U08, 38, [7:7], "Off", "On"
285+
286+ primePulse = scalar, U08, 39, "ms", 0.1, 0.0, 0.0, 25.5, 1
287+ dutyLim = scalar, U08, 40, "%", 1.0, 0.0, 0.0, 95.0, 0
288+ flexFreqLow = scalar, U08, 41, "Hz", 1.0, 0.0, 0.0, 250.0, 0
289+ flexFreqHigh = scalar, U08, 42, "Hz", 1.0, 0.0, 0.0, 250.0, 0
290+
291+ boostMaxDuty = scalar, U08, 43, "%", 1.0, 0.0, 0.0, 100.0, 0
292+ tpsMin = scalar, U08, 44, "ADC", 1.0, 0.0, 0.0, 255.0, 0
293+ tpsMax = scalar, U08, 45, "ADC", 1.0, 0.0, 0.0, 255.0, 0
294+ mapMin = scalar, S08, 46, "kpa", 1.0, 0.0, -100, 127.0, 0
295+ mapMax = scalar, U16, 47, "kpa", 1.0, 0.0, 0.0, 25500, 0
296+ fpPrime = scalar, U08, 49, "s", 1.0, 0.0, 0.0, 255.0, 0
297+ stoich = scalar, U08, 50, ":1", 0.1, 0.0, 0.0, 25.5, 1
298+ oddfire2 = scalar, U16, 51, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
299+ oddfire3 = scalar, U16, 53, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
300+ oddfire4 = scalar, U16, 55, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
301+
302+ 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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
303+ idleUpPolarity= bits, U08, 57, [6:6], "Normal", "Inverted"
304+ idleUpEnabled = bits, U08, 57, [7:7], "Off", "On"
305+ idleUpAdder = scalar, U08, 58, "% / Steps" 1.0, 0.0, 0.0, 250.0, 0
306+ taeTaperMin = scalar, U08, 59, "RPM", 100, 0.0, 1000, 10000, 0
307+ taeTaperMax = scalar, U08, 60, "RPM", 100, 0.0, 2000, 10000, 0
308+
309+ iacCLminDuty = scalar, U08, 61, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles when using closed loop idle
310+ iacCLmaxDuty = scalar, U08, 62, "%", 1.0, 0.0, 0.0, 100.0, 0
311+ boostMinDuty = scalar, U08, 63, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles for boost control
312+
313+ baroMin = scalar, S08, 64, "kpa", 1.0, 0.0, -100, 127.0, 0
314+ baroMax = scalar, U16, 65, "kpa", 1.0, 0.0, 0.0, 25500, 0
315+ EMAPMin = scalar, S08, 67, "kpa", 1.0, 0.0, -100, 127.0, 0
316+ EMAPMax = scalar, U16, 68, "kpa", 1.0, 0.0, 0.0, 25500, 0
317+
318+ fanWhenOff = bits, U08, 70, [0:0], "No", "Yes"
319+ unused_fan_bits = bits, U08, 70,[1:7]
320+
321+;[PJSC] unused2-67 = array, U08, 71, [56], "%", 1.0, 0.0, 0.0, 255, 0
322+ pjscFreq = scalar, U08, 71, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC]
323+ exValvePosMin = scalar, U08, 72, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
324+ exValvePosMax = scalar, U08, 73, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
325+ exTrigHysteresis = scalar, U08, 74, "deg", 1.0, 0.0, 0.0, 255.0, 0 ; V
326+ squirtDeviceType = bits, U08, 75, [0:0], "Injector", "Pump Jet" ;[PJSC]
327+ multiVEmapEnabled = bits, U08, 75, [1:1], "Disable", "Enable" ;[PJSC v1.01] For Dual Fuel Load
328+ mapSeparationEnabled = bits, U08, 75, [2:2], "Disable", "Enable" ;[PJSC v1.01] For Dual Fuel Load
329+ mapSwitchingEnabled = bits, U08, 75, [3:3], "Disable", "Enable" ;[PJSC v1.01] For Dual Fuel Load
330+ dualFuelEnabled = bits, U08, 75, [4:4], "Disable", "Enable" ;[PJSC v1.01] For Dual Fuel Load
331+ secondaryFuelUsage = bits, U08, 75, [5:5], "additive", "multiply" ;[PJSC v1.01] For Dual Fuel Load
332+;[PJSC v1.01] unused2_75 = bits, U08, 75, [6:7] ;[PJSC v1.01]
333+ fuelCorrectionEnabled = bits, U08, 75, [6:6], "Disable", "Enable" ;[PJSC v1.01]
334+ unused2_75 = bits, U08, 75, [7:7] ;[PJSC v1.01]
335+ exTrigModeSelect = bits, U08, 76, [0:1], "Disable", "Spark timing capture", "MAP select switch", "INVALID" ;[PJSC]
336+ externalTrigEdge = bits, U08, 76, [2:2], "Rising", "Falling" ; |
337+ exValveCaptureEnabled = bits, U08, 76, [3:3], "Disable", "Exhaust Valve Position capture" ; |
338+ exValveCalibrationMode = bits, U08, 76, [4:4], "Off", "On" ;[PJSC]
339+ unused2_76 = bits, U08, 76, [5:7] ;[PJSC v1.01]
340+ dutyPulseCaptureEnabled = bits, U08, 77, [0:0], "Disable", "PWM input" ; |
341+ dutyPulseCaptureEnabled2 = bits, U08, 77, [1:1], "Disable", "PWM input" ; |
342+ dutyPulseOnLevel = bits, U08, 77, [2:2], "High", "Low" ; |
343+ dutyPulseOnLevel2 = bits, U08, 77, [3:3], "High", "Low" ; V
344+ unused2_77 = bits, U08, 77, [4:7] ;[PJSC v1.01]
345+#if table4_spark ;[PJSC v1.01] For switching table4
346+ veMapSelection1Pri = bits, U08, 78, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
347+ veMapSelection1Sec = bits, U08, 78, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
348+ veMapSelection2Pri = bits, U08, 79, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
349+ veMapSelection2Sec = bits, U08, 79, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
350+ veMapSelection3Pri = bits, U08, 80, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
351+ veMapSelection3Sec = bits, U08, 80, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
352+ veMapSelection4Pri = bits, U08, 81, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
353+ veMapSelection4Sec = bits, U08, 81, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
354+ veMapSelection1_2Pri = bits, U08, 82, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
355+ veMapSelection1_2Sec = bits, U08, 82, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
356+ veMapSelection2_2Pri = bits, U08, 83, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
357+ veMapSelection2_2Sec = bits, U08, 83, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
358+ veMapSelection3_2Pri = bits, U08, 84, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
359+ veMapSelection3_2Sec = bits, U08, 84, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
360+ veMapSelection4_2Pri = bits, U08, 85, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
361+ veMapSelection4_2Sec = bits, U08, 85, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
362+#endif ;[PJSC v1.01] For switching table4
363+#if table4_fuel ;[PJSC v1.01]
364+ veMapSelection1Pri = bits, U08, 78, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
365+ veMapSelection1Sec = bits, U08, 78, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
366+ veMapSelection2Pri = bits, U08, 79, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
367+ veMapSelection2Sec = bits, U08, 79, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
368+ veMapSelection3Pri = bits, U08, 80, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
369+ veMapSelection3Sec = bits, U08, 80, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
370+ veMapSelection4Pri = bits, U08, 81, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
371+ veMapSelection4Sec = bits, U08, 81, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
372+ veMapSelection1_2Pri = bits, U08, 82, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
373+ veMapSelection1_2Sec = bits, U08, 82, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
374+ veMapSelection2_2Pri = bits, U08, 83, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
375+ veMapSelection2_2Sec = bits, U08, 83, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
376+ veMapSelection3_2Pri = bits, U08, 84, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
377+ veMapSelection3_2Sec = bits, U08, 84, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
378+ veMapSelection4_2Pri = bits, U08, 85, [0:3], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
379+ veMapSelection4_2Sec = bits, U08, 85, [4:7], "VE Table 1","VE Table 2","VE Table 3","VE Table 4","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
380+#endif ;[PJSC v1.01] For switching table4
381+ dutyFreqTst1 = scalar, U08, 86, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.01]
382+ dutyFreqTst2 = scalar, U08, 87, "Hz", 2.0, 0.0, 10, 511, 0 ; |
383+ dutyFreqTst3 = scalar, U08, 88, "Hz", 2.0, 0.0, 10, 511, 0 ; |
384+ dutyFreqTst4 = scalar, U08, 89, "Hz", 2.0, 0.0, 10, 511, 0 ; |
385+ dutyFreqTst5 = scalar, U08, 90, "Hz", 2.0, 0.0, 10, 511, 0 ; |
386+ dutyFreqTst6 = scalar, U08, 91, "Hz", 2.0, 0.0, 10, 511, 0 ; |
387+ dutyFreqTst7 = scalar, U08, 92, "Hz", 2.0, 0.0, 10, 511, 0 ; |
388+ dutyFreqTst8 = scalar, U08, 93, "Hz", 2.0, 0.0, 10, 511, 0 ; |
389+ dutyFreqTst9 = scalar, U08, 94, "Hz", 2.0, 0.0, 10, 511, 0 ; |
390+ dutyFreqTst10 = scalar, U08, 95, "Hz", 2.0, 0.0, 10, 511, 0 ; |
391+ dutyFreqTst11 = scalar, U08, 96, "Hz", 2.0, 0.0, 10, 511, 0 ; |
392+ dutyFreqTst12 = scalar, U08, 97, "Hz", 2.0, 0.0, 10, 511, 0 ; |
393+ dutyRatioTst1 = scalar, U08, 98, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
394+ dutyRatioTst2 = scalar, U08, 99, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
395+ dutyRatioTst3 = scalar, U08, 100, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
396+ dutyRatioTst4 = scalar, U08, 101, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
397+ dutyRatioTst5 = scalar, U08, 102, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
398+ dutyRatioTst6 = scalar, U08, 103, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
399+ dutyRatioTst7 = scalar, U08, 104, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
400+ dutyRatioTst8 = scalar, U08, 105, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
401+ dutyRatioTst9 = scalar, U08, 106, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
402+ dutyRatioTst10 = scalar, U08, 107, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
403+ dutyRatioTst11 = scalar, U08, 108, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
404+ dutyRatioTst12 = scalar, U08, 109, "%", 1.0, 0.0, 0.0, 100.0, 0 ; |
405+ testop_fp = bits, U08, 110, [0:0], "Off", "On" ; |
406+ testop_inj = bits, U08, 110, [1:2], "Off", "One", "INVALID", "All" ; |
407+ testop_coil = bits, U08, 110, [3:4], "Off", "One", "INVALID", "INVALID" ; |
408+ testsel_inj = bits, U08, 110, [5:6], "Inj1", "Inj2", "Inj3", "Inj4" ; |
409+ testsel_coil = bits, U08, 110, [7:7], "CoilA", "CoilB" ; |
410+ testint = scalar, U16, 111, "ms", 0.01, 0.00, 0, 655.35, 1 ; V
411+ testrpm = scalar, U16, 111, "RPM", 1.0, { 60000/testint }, 0, 60000, 0 ;[PJSC v1.01]
412+ testpw = scalar, U16, 113, "ms", 0.01, 0.00, 0, 655.35, 1 ; * ( 1 byte)
413+ testinjcnt = scalar, U16, 115, "", 1, 0, 0, 65535, 0, noLocalUpdate ;
414+#if table4_spark ;[PJSC v1.01]
415+ muxout1selection = bits, U08, 117, [0:3], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
416+ muxout2selection = bits, U08, 117, [4:7], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
417+ muxout3selection = bits, U08, 118, [0:3], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
418+ muxout4selection = bits, U08, 118, [4:7], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
419+#endif ;[PJSC v1.01]
420+#if table4_fuel ;[PJSC v1.01]
421+ muxout1selection = bits, U08, 117, [0:3], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "INVALID", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" ;[PJSC v1.01]
422+ muxout2selection = bits, U08, 117, [4:7], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "INVALID", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" ;[PJSC v1.01]
423+ muxout3selection = bits, U08, 118, [0:3], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "INVALID", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" ;[PJSC v1.01]
424+ muxout4selection = bits, U08, 118, [4:7], "Disable/Test Mode", "IDLE control", "Thermo Fan control", "INVALID", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" ;[PJSC v1.01]
425+#endif ;[PJSC v1.01]
426+;[PJSC v1.01] baroDenBins = array, U08, 102, [9], "kPa", 1.0, 0.0, 0.0, 255.0, 0 ;[PJSC v1.01] Bins for the Barometric density correction curve
427+;[PJSC v1.01] baroDenRates = array, U08, 111, [9], "%", 1.0, 0.0, 0.0, 255.0, 0 ;[PJSC v1.01] Values for the \Barometric density correction curve
428+ algorithm2 = bits, U08, 119, [0:2], $loadSourceNames ;[PJSC v1.01] For Dual Fuel Load
429+ algorithm3 = bits, U08, 119, [3:5], $loadSourceNames ;[PJSC v1.01]
430+ unused2_119 = bits, U08, 119, [6:7] ;[PJSC v1.01]
431+ table4Usage = bits, U08, 120, [0:0], "Fuel", "Spark" ;[PJSC v1.01]
432+ unused2_120 = bits, U08, 120, [1:7] ;[PJSC v1.01]
433+ inj1SquirtStartEnd = bits, U08, 121, [0:0], "End angle", "Start angle" ;[PJSC v1.01]
434+ inj2SquirtStartEnd = bits, U08, 121, [1:1], "End angle", "Start angle" ;[PJSC v1.01]
435+ inj3SquirtStartEnd = bits, U08, 121, [2:2], "End angle", "Start angle" ;[PJSC v1.01]
436+ inj4SquirtStartEnd = bits, U08, 121, [3:3], "End angle", "Start angle" ;[PJSC v1.01]
437+ unused2_121 = bits, U08, 121, [4:7] ;[PJSC v1.01]
438+ unused2_122 = array, U08, 122, [6], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.01]
439+
440+
441+;Page 2 is the fuel map and axis bins only
442+page = 2
443+ ; name = bits, type, offset, bits
444+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
445+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
446+ veTable = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
447+ rpmBins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
448+;[PJSC v1.01] fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
449+ fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 1.0, 0.0, 0.0, {fuelLoadMax}, 0 ;[PJSC v1.01]
450+ ;fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, { arrayValue(rpmBins , algorithm) }, 0
451+
452+;--------------------------------------------------
453+;Start Ignition table (Page 3)
454+;--------------------------------------------------
455+page = 3
456+ advTable1 = array, U08, 0,[16x16], "deg", 1.0, -40, -40, 215.0, 0
457+ rpmBins2 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
458+;[PJSC v1.01] mapBins1= array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 2.0, 0.0, 0.0, {ignLoadMax}, 0 ; This name has to be used in order for the table to show up in MLVs table. I can't find the regexs that make this work :(
459+ mapBins1= array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 1.0, 0.0, 0.0, {ignLoadMax}, 0 ;[PJSC v1.01]
460+
461+;--------------------------------------------------
462+;Start Page 4
463+;These are primarily ignition related settings (Previously part of page 2)
464+;--------------------------------------------------
465+page = 4
466+ TrigAng = scalar, S16, 0, "Deg", 1, 0, -360, 360, 0
467+ FixAng = scalar, S08, 2, "Deg", 1, 0, -64, 64, 0 ; Allow negative values here
468+ CrankAng = scalar, U08, 3, "Deg", 1, 0, -10, 80, 0
469+ TrigAngMul = scalar, U08, 4, "", 1, 0, 0, 88, 0 ; Multiplier for tooth counts that don't evenly divide into 360
470+ TrigEdge = bits, U08, 5,[0:0], "RISING", "FALLING"
471+ TrigSpeed = bits, U08, 5,[1:1], "Crank Speed", "Cam Speed"
472+ IgInv = bits, U08, 5,[2:2], "Going Low", "Going High"
473+ 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", "NSR", "KATANA", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
474+ TrigEdgeSec= bits, U08, 6,[0:0], "RISING", "FALLING"
475+ 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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
476+ useResync = bits, U08, 6,[7:7], "No", "Yes"
477+ sparkDur = scalar, U08, 7, "ms", 0.1, 0, 0, 25.5, 1 ; Spark duration
478+ trigPatternSec = bits, U08, 8,[0:7], "Single tooth cam", "4-1 cam", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
479+
480+;Reset Control
481+ bootloaderCaps = scalar, U08, 9, "level", 1, 0, 0, 255, 0
482+#if resetcontrol_adv
483+ resetControl = bits, U08, 10,[0:1], "Disabled", "Prevent When Running", "Prevent Always", "Serial Command"
484+#else
485+ resetControl = bits, U08, 10,[0:1], "Disabled", "INVALID", "INVALID", "Serial Command"
486+#endif
487+ 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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
488+
489+ SkipCycles = scalar, U08, 11, "cycles", 1, 0, 0, 255, 0
490+
491+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
492+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
493+;Dwell control
494+ boostType = bits, U08, 12, [0:0], "Open Loop", "Closed Loop"
495+ useDwellLim = bits, U08, 12, [1:1], "Off", "On"
496+ sparkMode = bits, U08, 12, [2:4], "Wasted Spark", "Single Channel", "Wasted COP", "Sequential", "Rotary", "INVALID", "INVALID", "INVALID"
497+ TrigFilter = bits, U08, 12, [5:6], "Off", "Weak", "Medium", "Aggressive"
498+ ignCranklock = bits, U08, 12, [7:7], "Off", "On"
499+ dwellcrank = scalar, U08, 13, "ms", 0.1, 0, 0, 25, 1
500+ dwellrun = scalar, U08, 14, "ms", 0.1, 0, 0, 8, 1 ;running dwell variable railed to 8 - who needs more than 8ms?
501+ numTeeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
502+ missingTeeth = scalar, U08, 16, "teeth", 1.0, 0.0, 0.0, 255, 0
503+
504+ crankRPM = scalar, U08, 17, "rpm", 10, 0.0, 100, 1000, 0
505+ tpsflood = scalar, U08, 18, "%", 1.0, 0.0, 0.0, 255.0, 0
506+
507+;Rev Limits
508+ SoftRevLim = scalar, U08, 19, "rpm", 100, 0.0, 100, 25500, 0
509+ SoftLimRetard = scalar, U08, 20, "deg", 1.0, 0.0, 0.0, 80, 0
510+ SoftLimMax = scalar, U08, 21, "s", 0.1, 0.0, 0.0, 25.5, 1
511+ HardRevLim = scalar, U08, 22, "rpm", 100, 0.0, 100, 25500, 0
512+
513+;TPS based acceleration enrichment
514+ taeBins = array, U08, 23, [ 4], "%/s", 10.0, 0.0, 0.00, 2550.0, 0
515+ taeRates = array, U08, 27, [ 4], "%", 1.0, 0.0, 0.00, 255.0, 0 ; 4 bytes
516+;WUE Bins (Needed somewhere to put these
517+ #if CELSIUS
518+ wueBins = array, U08, 31, [10], "C", 1.0, -40, -40, 102.0, 0
519+ #else
520+ wueBins = array, U08, 31, [10], "F", 1.8, -22.23, -40, 215.0, 0
521+ #endif
522+;Dwell config options
523+ dwellLim = scalar, U08, 41, "ms", 1, 0, 0, 32, 0
524+ dwellRates = array, U08, 42, [6], "%", 1.0, 0.0, 0.00, 255.0, 0
525+
526+;IAT (Inlet air temp) timing retard
527+ #if CELSIUS
528+ iatRetBins = array, U08, 48, [ 6], "C", 1.0, 0.0, 0.00, 255.0, 0
529+ #else
530+ iatRetBins = array, U08, 48, [ 6], "F", 1.8, 17.77, 0.00, 255.0, 0 ; No -40 degree offset here
531+ #endif
532+ iatRetRates = array, U08, 54, [ 6], "deg", 1.0, 0.0, 0.00, 255.0, 0
533+;Decelleration Fuel Cut Off (DFCO)
534+ dfcoRPM = scalar, U08, 60, "RPM", 10.0, 0.0, 100, 2550, 0
535+ dfcoHyster = scalar, U08, 61, "RPM", 1.0, 0.0, 100, 255.0, 0
536+ dfcoTPSThresh= scalar, U08, 62, "%", 1.0, 0.0, 0, 100.0, 0
537+;Cranking ignition bypass
538+ ignBypassEnable = bits, U08, 63, [0:0], "Off", "On"
539+ 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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
540+ ignBypassHiLo = bits, U08, 63, [7:7], "LOW", "HIGH"
541+;Analog input filter levels (Note max values are 254 so that default values of 255 can be overwirtten on bootup)
542+ ADCFILTER_TPS = scalar, U08, 64, "%", 1.0, 0.0, 0, 240, 0
543+ ADCFILTER_CLT = scalar, U08, 65, "%", 1.0, 0.0, 0, 240, 0
544+ ADCFILTER_IAT = scalar, U08, 66, "%", 1.0, 0.0, 0, 240, 0
545+ ADCFILTER_O2 = scalar, U08, 67, "%", 1.0, 0.0, 0, 240, 0
546+ ADCFILTER_BAT = scalar, U08, 68, "%", 1.0, 0.0, 0, 240, 0
547+ ADCFILTER_MAP = scalar, U08, 69, "%", 1.0, 0.0, 0, 240, 0
548+ ADCFILTER_BARO = scalar, U08, 70, "%", 1.0, 0.0, 0, 240, 0
549+
550+;[PJSC v1.01] unused4-64 = array, U08, 71, [56], "%", 1.0, 0.0, 0.0, 255, 0
551+
552+ baroDenBins = array, U08, 71, [9], "kPa", 1.0, 0.0, 0.0, 255.0, 0 ;[PJSC v1.01] Bins for the Barometric density correction curve
553+ baroDenRates = array, U08, 80, [9], "%", 1.0, 0.0, 0.0, 255.0, 0 ;[PJSC v1.01] Values for the \Barometric density correction curve
554+ unused4-89 = array, U08, 89, [38], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.01]
555+
556+;--------------------------------------------------
557+;Start AFR page
558+;--------------------------------------------------
559+page = 5
560+#if LAMBDA
561+ afrTable = array, U08, 0,[16x16], "Lambda", { 0.1 / stoich }, 0.0000, 0.00, 2.00, 3
562+#else
563+ afrTable = array, U08, 0,[16x16], "AFR", 0.1, 0.0, 7, 25.5, 1
564+#endif
565+
566+ rpmBinsAFR = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
567+ #if SPEED_DENSITY
568+ mapBinsAFR = array, U08, 272,[ 16], "kPa", 2.0, 0.0, 0.0, 511.0, 0
569+ #elif ALPHA_N
570+ tpsBinsAFR = array, U08, 272,[ 16], "TPS", 2.0, 0.0, 0.0, 100.0, 0
571+ #endif
572+
573+;--------------------------------------------------
574+;Start page 6
575+; Page 6 is all settings associated with O2/AFR
576+;--------------------------------------------------
577+page = 6
578+ egoAlgorithm= bits , U08, 0, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
579+ egoType = bits , U08, 0, [2:3], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
580+ boostEnabled= bits, U08, 0, [4:4], "Off", "On"
581+ vvtEnabled = bits, U08, 0, [5:5], "Off", "On"
582+#if table4_spark ;[PJSC v1.01]
583+ boostCutType= bits, U08, 0, [6:7], "Off", "Spark Only", "Fuel Only","Both"
584+#endif ;[PJSC v1.01]
585+#if table4_fuel ; |
586+ boostCutType= bits, U08, 0, [6:7], "Off", "INVALID", "Fuel Only","INVALID" ; V
587+#endif ;[PJSC v1.01]
588+
589+ egoKP = scalar, U08, 1, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
590+ egoKI = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
591+ egoKD = scalar, U08, 3, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
592+ #if CELSIUS
593+ egoTemp = scalar, U08, 4, "C", 1.0, -40, -40, 102.0, 0
594+ #else
595+ egoTemp = scalar, U08, 4, "F", 1.8, -22.23, -40, 215.0, 0
596+ #endif
597+ egoCount = scalar, U08, 5, "", 4.0, 0.0, 4.0, 255.0, 0 ; * ( 1 byte)
598+ unused6-6 = scalar, U08, 6, "%", 1.0, 0.0, 0.0, 255.0, 0
599+ egoLimit = scalar, U08, 7, "", 1, 0, 0, 16, 0
600+ ego_min = scalar, U08, 8, "AFR", 0.1, 0.0, 7, 25, 1
601+ ego_max = scalar, U08, 9, "AFR", 0.1, 0.0, 7, 25, 1
602+ ego_sdelay = scalar, U08, 10, "sec", 1, 0, 0, 120, 0
603+ egoRPM = scalar, U08, 11, "rpm", 100, 0.0, 100, 25500, 0
604+ egoTPSMax = scalar, U08, 12, "%", 1, 0, 0, 120, 0
605+ vvtPin = 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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
606+ useExtBaro = bits, U08, 13, [6:6], "No", "Yes"
607+ boostMode = bits, U08, 13, [7:7], "Simple", "Full"
608+ 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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
609+ VVTasOnOff = bits, U08, 14, [6:6], "No", "Yes"
610+ useEMAP = bits, U08, 14, [7:7], "No", "Yes"
611+ brvBins = array, U08, 15, [6], "V", 0.1, 0, 6, 24, 1 ; Bins for the battery reference voltage
612+ injBatRates = array, U08, 21, [6], "%", 1, 0, 0, 255, 0 ;Values for injector pulsewidth vs voltage
613+ #if CELSIUS
614+ airDenBins = array, U08, 27, [9], "C", 1.0, -40, -40, 215, 0 ; Bins for the air density correction curve
615+ #else
616+ airDenBins = array, U08, 27, [9], "F", 1.8, -22.23, -40, 215, 0 ; Bins for the air density correction curve
617+ #endif
618+ airDenRates = array, U08, 36, [9], "%", 1.0, 0.0, 0, 255, 0 ; Values for the air density correction curve
619+
620+; PWM Frequencies
621+ boostFreq = scalar, U08, 45, "Hz", 2.0, 0.0, 10, 511, 0
622+ vvtFreq = scalar, U08, 46, "Hz", 2.0, 0.0, 10, 511, 0
623+ idleFreq = scalar, U08, 47, "Hz", 2.0, 0.0, 10, 511, 0
624+
625+; Launch Control
626+ 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", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
627+ launchEnable= bits, U08, 48, [6:6], "No", "Yes"
628+ launchHiLo = bits, U08, 48, [7:7], "LOW", "HIGH"
629+
630+ lnchSoftLim = scalar, U08, 49, "rpm", 100, 0.0, 100, 25500, 0
631+ lnchRetard = scalar, S08, 50, "deg", 1.0, 0.0, -30, 40, 0
632+ lnchHardLim = scalar, U08, 51, "rpm", 100, 0.0, 100, 25500, 0
633+ lnchFuelAdd = scalar, U08, 52, "%", 1.0, 0.0, 0.0, 80, 0
634+
635+ idleKP = scalar, U08, 53, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
636+ idleKI = scalar, U08, 54, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
637+ idleKD = scalar, U08, 55, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
638+ boostLimit = scalar, U08, 56, "kPa", 2.0, 0.0, 0.0, 511.0, 0
639+ boostKP = scalar, U08, 57, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
640+ boostKI = scalar, U08, 58, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
641+ boostKD = scalar, U08, 59, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
642+
643+ lnchPullRes = bits, U08, 60, [0:1], "Float" , "Pullup", "INVALID", "INVALID"
644+ fuelTrimEnabled= bits, U08, 60, [2:2], "No", "Yes"
645+ flatSEnable = bits, U08, 60, [3:3], "No", "Yes"
646+; Baro Sensor pin
647+ baroPin = bits, U08, 60, [4:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A8", "A10", "A11", "A12", "A13", "A14", "A15"
648+
649+; Flat shift
650+ flatSSoftWin = scalar, U08, 61, "rpm", 100, 0.0, 100, 25500, 0
651+ flatSRetard = scalar, U08, 62, "deg", 1.0, 0.0, 0.0, 80, 0
652+ flatSArm = scalar, U08, 63, "rpm", 100, 0.0, 100, 25500, 0
653+
654+ iacCLValues = array, U08, 64, [10], "RPM", 10.0, 0.0, 0, 2550, 0
655+ iacOLStepVal = array, U08, 74, [10], "Steps", 3, 0, 0, 765, 0
656+ iacOLPWMVal = array, U08, 84, [10], "Duty %", 1.0, 0, 0, 100, 0
657+ #if CELSIUS
658+ iacBins = array, U08, 94, [10], "C", 1.0, -40, -40, 215, 0
659+ #else
660+ iacBins = array, U08, 94, [10], "F", 1.8, -22.23, -40, 215, 0
661+ #endif
662+ iacCrankSteps= array, U08, 104, [4], "Steps", 3, 0, 0, 765, 0
663+ iacCrankDuty = array, U08, 108, [4], "Duty %", 1.0, 0, 0, 100, 0
664+ #if CELSIUS
665+ iacCrankBins = array, U08, 112, [4], "C", 1.0, -40, -40, 215, 0
666+ #else
667+ iacCrankBins = array, U08, 112, [4], "F", 1.8, -22.23, -40, 215, 0
668+ #endif
669+
670+;[PJSC] iacAlgorithm = bits , U08, 116, [0:2], "None", "On/Off", "PWM Open loop", "PWM Closed loop", "Stepper Open Loop", "Stepper Closed Loop", "INVALID", "INVALID"
671+ iacAlgorithm = bits , U08, 116, [0:2], "None", "On/Off", "PWM Open loop", "PWM Closed loop", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC]
672+ iacStepTime = bits , U08, 116, [3:5], "INVALID","1", "2", "3", "4", "5", "6","INVALID"
673+ iacChannels = bits, U08, 116, [6:6], "1", "2"
674+ iacPWMdir = bits , U08, 116, [7:7], "Normal", "Reverse"
675+
676+ #if CELSIUS
677+ iacFastTemp = scalar, U08, 117, "C", 1.0, -40, -40, 215, 0
678+ #else
679+ iacFastTemp = scalar, U08, 117, "F", 1.8, -22.23, -40, 215, 0
680+ #endif
681+
682+ iacStepHome = scalar, U08, 118, "Steps", 3, 0, 0, 765, 0
683+ iacStepHyster= scalar, U08, 119, "Steps", 1, 0.0, 0.0, 10, 0
684+
685+ ; Begin fan control vairables
686+ fanInv = bits, U08, 120, [0:0], "No", "Yes"
687+ fanEnable = bits, U08, 120, [1:1], "Off", "On/Off"
688+ 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", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
689+ #if CELSIUS
690+ fanSP = scalar, U08, 121, "C", 1.0, -40, -40, 215.0, 0
691+ fanHyster = scalar, U08, 122, "C", 1.0, 0.0, 0.0, 40, 0
692+ #else
693+ fanSP = scalar, U08, 121, "F", 1.8, -22.23, -40, 215.0, 0
694+ fanHyster = scalar, U08, 122, "F", 1.0, 0.0, 0.0, 40, 0
695+ #endif
696+ fanFreq = scalar, U08 , 123, "Hz", 2.0, 0.0, 10, 511, 0
697+ #if CELSIUS
698+ fanPWMBins = array, U08, 124, [4], "C", 1.0, -40, -40, 215, 0
699+ #else
700+ fanPWMBins = array, U08, 124, [4], "F", 1.8, -22.23, -40, 215, 0
701+ #endif
702+
703+;--------------------------------------------------
704+;Boost and vvt maps (Page 7)
705+;--------------------------------------------------
706+page = 7
707+;notes for boostTable in PSI~~~There are 6.895 psis to a kPa then x 2 like the kPa ver~~~div atmos. pressure in kPa by 2 and make neg so to subtract instead of add
708+; #if BOOSTPSI
709+; boostTable = array, U08, 0,[8x8], "PSI", 0.29007547546041846, -50.6625, 0, 74, 0
710+; #else
711+ boostTable = array, U08, 0,[8x8], { bitStringValue( boostTableLabels, boostType ) }, 2.0, 0.0, 0, boostTableLimit, 0
712+; #endif
713+ rpmBinsBoost = array, U08, 64,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
714+ tpsBinsBoost = array, U08, 72,[ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
715+ vvtTable = array, U08, 80,[8x8], "%", 1.0, 0.0, 0, 100, 0
716+ rpmBinsVVT = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
717+ tpsBinsVVT = array, U08, 152,[ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
718+;Fuel staging Table
719+ stagingTable = array, U08, 160, [8x8], "%", 1.0, 0.0, 0.0, 100.0, 0
720+ rpmBinsStaging= array, U08, 224, [ 8], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
721+ #if SPEED_DENSITY
722+ mapBinsStaging= array, U08, 232, [ 8], "kPa", 2.0, 0.0, 0.0, 511.0, 0
723+ #elif ALPHA_N
724+ tpsBinsStaging= array, U08, 232, [ 8], "TPS", 2.0, 0.0, 0.0, 100.0, 0
725+ #endif
726+
727+;--------------------------------------------------
728+;Sequential fuel trim tables (Page 8)
729+;--------------------------------------------------
730+;[PJSC v1.01]page = 8
731+;[PJSC v1.01] fuelTrim1Table = array, U08, 0,[6x6], "%", 1.0, -128, -50, 50, 0
732+;[PJSC v1.01] fuelTrim1rpmBins = array, U08, 36,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
733+;[PJSC v1.01]#if SPEED_DENSITY
734+;[PJSC v1.01] fuelTrim1loadBins = array, U08, 42,[ 6], "kPa", 2.0, 0.0, 0.0, 511.0, 0
735+;[PJSC v1.01]#elif ALPHA_N
736+;[PJSC v1.01] fuelTrim1loadBins = array, U08, 42,[ 6], "TPS", 2.0, 0.0, 0.0, 100.0, 0
737+;[PJSC v1.01]#endif
738+;[PJSC v1.01]
739+;[PJSC v1.01] fuelTrim2Table = array, U08, 48,[6x6], "%", 1.0, -128, -50, 50, 0
740+;[PJSC v1.01] fuelTrim2rpmBins = array, U08, 84,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
741+;[PJSC v1.01]#if SPEED_DENSITY
742+;[PJSC v1.01] fuelTrim2loadBins = array, U08, 90,[ 6], "kPa", 2.0, 0.0, 0.0, 511.0, 0
743+;[PJSC v1.01]#elif ALPHA_N
744+;[PJSC v1.01] fuelTrim2loadBins = array, U08, 90,[ 6], "TPS", 2.0, 0.0, 0.0, 100.0, 0
745+;[PJSC v1.01]#endif
746+;[PJSC v1.01]
747+;[PJSC v1.01] fuelTrim3Table = array, U08, 96,[6x6], "%", 1.0, -128, -50, 50, 0
748+;[PJSC v1.01] fuelTrim3rpmBins = array, U08, 132,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
749+;[PJSC v1.01]#if SPEED_DENSITY
750+;[PJSC v1.01] fuelTrim3loadBins = array, U08, 138,[ 6], "kPa", 2.0, 0.0, 0.0, 511.0, 0
751+;[PJSC v1.01]#elif ALPHA_N
752+;[PJSC v1.01] fuelTrim3loadBins = array, U08, 138,[ 6], "TPS", 2.0, 0.0, 0.0, 100.0, 0
753+;[PJSC v1.01]#endif
754+;[PJSC v1.01]
755+;[PJSC v1.01] fuelTrim4Table = array, U08, 144,[6x6], "%", 1.0, -128, -50, 50, 0
756+;[PJSC v1.01] fuelTrim4rpmBins = array, U08, 180,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
757+;[PJSC v1.01]#if SPEED_DENSITY
758+;[PJSC v1.01] fuelTrim4loadBins = array, U08, 186,[ 6], "kPa", 2.0, 0.0, 0.0, 511.0, 0
759+;[PJSC v1.01]#elif ALPHA_N
760+;[PJSC v1.01] fuelTrim4loadBins = array, U08, 186,[ 6], "TPS", 2.0, 0.0, 0.0, 100.0, 0
761+;[PJSC v1.01]#endif
762+
763+;--------------------------------------------------
764+;CANBUS control and Auxillary io(Page 9)
765+;--------------------------------------------------
766+;[PJSC v1.01]page = 9
767+page = 8 ;[PJSC v1.01]
768+ enable_secondarySerial = bits, U08, 0, [0:0], "Disable", "Enable"
769+ intcan_available = bits, U08, 0, [1:1], "Disable", "Enable"
770+ enable_intcan = bits, U08, 0, [2:2], "Disable", "Enable"
771+
772+ caninput_sel0a = bits, U08, 1, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
773+ caninput_sel0b = bits, U08, 1, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
774+ caninput_sel0extsourcea = bits, U08, 1, [5:5], "Via Secondary Serial", "INVALID"
775+ caninput_sel0extsourceb = bits, U08, 1, [6:6], "Via Secondary Serial", "Via Internal CAN"
776+ caninput_sel0extsourcec = bits, U08, 1, [7:7], "INVALID", "Via Internal CAN"
777+
778+ caninput_sel1a = bits, U08, 2, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
779+ caninput_sel1b = bits, U08, 2, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
780+ caninput_sel1extsourcea = bits, U08, 2, [5:5], "Via Secondary Serial", "INVALID"
781+ caninput_sel1extsourceb = bits, U08, 2, [6:6], "Via Secondary Serial", "Via Internal CAN"
782+ caninput_sel1extsourcec = bits, U08, 2, [7:7], "INVALID", "Via Internal CAN"
783+
784+ caninput_sel2a = bits, U08, 3, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
785+ caninput_sel2b = bits, U08, 3, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
786+ caninput_sel2extsourcea = bits, U08, 3, [5:5], "Via Secondary Serial", "INVALID"
787+ caninput_sel2extsourceb = bits, U08, 3, [6:6], "Via Secondary Serial", "Via Internal CAN"
788+ caninput_sel2extsourcec = bits, U08, 3, [7:7], "INVALID", "Via Internal CAN"
789+
790+ caninput_sel3a = bits, U08, 4, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
791+ caninput_sel3b = bits, U08, 4, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
792+ caninput_sel3extsourcea = bits, U08, 4, [5:5], "Via Secondary Serial", "INVALID"
793+ caninput_sel3extsourceb = bits, U08, 4, [6:6], "Via Secondary Serial", "Via Internal CAN"
794+ caninput_sel3extsourcec = bits, U08, 4, [7:7], "INVALID", "Via Internal CAN"
795+
796+ caninput_sel4a = bits, U08, 5, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
797+ caninput_sel4b = bits, U08, 5, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
798+ caninput_sel4extsourcea = bits, U08, 5, [5:5], "Via Secondary Serial", "INVALID"
799+ caninput_sel4extsourceb = bits, U08, 5, [6:6], "Via Secondary Serial", "Via Internal CAN"
800+ caninput_sel4extsourcec = bits, U08, 5, [7:7], "INVALID", "Via Internal CAN"
801+
802+ caninput_sel5a = bits, U08, 6, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
803+ caninput_sel5b = bits, U08, 6, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
804+ caninput_sel5extsourcea = bits, U08, 6, [5:5], "Via Secondary Serial", "INVALID"
805+ caninput_sel5extsourceb = bits, U08, 6, [6:6], "Via Secondary Serial", "Via Internal CAN"
806+ caninput_sel5extsourcec = bits, U08, 6, [7:7], "INVALID", "Via Internal CAN"
807+
808+ caninput_sel6a = bits, U08, 7, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
809+ caninput_sel6b = bits, U08, 7, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
810+ caninput_sel6extsourcea = bits, U08, 7, [5:5], "Via Secondary Serial", "INVALID"
811+ caninput_sel6extsourceb = bits, U08, 7, [6:6], "Via Secondary Serial", "Via Internal CAN"
812+ caninput_sel6extsourcec = bits, U08, 7, [7:7], "INVALID", "Via Internal CAN"
813+
814+ caninput_sel7a = bits, U08, 8, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
815+ caninput_sel7b = bits, U08, 8, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
816+ caninput_sel7extsourcea = bits, U08, 8, [5:5], "Via Secondary Serial", "INVALID"
817+ caninput_sel7extsourceb = bits, U08, 8, [6:6], "Via Secondary Serial", "Via Internal CAN"
818+ caninput_sel7extsourcec = bits, U08, 8, [7:7], "INVALID", "Via Internal CAN"
819+
820+ caninput_sel8a = bits, U08, 9, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
821+ caninput_sel8b = bits, U08, 9, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
822+ caninput_sel8extsourcea = bits, U08, 9, [5:5], "Via Secondary Serial", "INVALID"
823+ caninput_sel8extsourceb = bits, U08, 9, [6:6], "Via Secondary Serial", "Via Internal CAN"
824+ caninput_sel8extsourcec = bits, U08, 9, [7:7], "INVALID", "Via Internal CAN"
825+
826+ caninput_sel9a = bits, U08, 10, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
827+ caninput_sel9b = bits, U08, 10, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
828+ caninput_sel9extsourcea = bits, U08, 10, [5:5], "Via Secondary Serial", "INVALID"
829+ caninput_sel9extsourceb = bits, U08, 10, [6:6], "Via Secondary Serial", "Via Internal CAN"
830+ caninput_sel9extsourcec = bits, U08, 10, [7:7], "INVALID", "Via Internal CAN"
831+
832+ caninput_sel10a = bits, U08, 11, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
833+ caninput_sel10b = bits, U08, 11, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
834+ caninput_sel10extsourcea = bits, U08, 11, [5:5], "Via Secondary Serial", "INVALID"
835+ caninput_sel10extsourceb = bits, U08, 11, [6:6], "Via Secondary Serial", "Via Internal CAN"
836+ caninput_sel10extsourcec = bits, U08, 11, [7:7], "INVALID", "Via Internal CAN"
837+
838+ caninput_sel11a = bits, U08, 12, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
839+ caninput_sel11b = bits, U08, 12, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
840+ caninput_sel11extsourcea = bits, U08, 12, [5:5], "Via Secondary Serial", "INVALID"
841+ caninput_sel11extsourceb = bits, U08, 12, [6:6], "Via Secondary Serial", "Via Internal CAN"
842+ caninput_sel11extsourcec = bits, U08, 12, [7:7], "INVALID", "Via Internal CAN"
843+
844+ caninput_sel12a = bits, U08, 13, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
845+ caninput_sel12b = bits, U08, 13, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
846+ caninput_sel12extsourcea = bits, U08, 13, [5:5], "Via Secondary Serial", "INVALID"
847+ caninput_sel12extsourceb = bits, U08, 13, [6:6], "Via Secondary Serial", "Via Internal CAN"
848+ caninput_sel12extsourcec = bits, U08, 13, [7:7], "INVALID", "Via Internal CAN"
849+
850+ caninput_sel13a = bits, U08, 14, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
851+ caninput_sel13b = bits, U08, 14, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
852+ caninput_sel13extsourcea = bits, U08, 14, [5:5], "Via Secondary Serial", "INVALID"
853+ caninput_sel13extsourceb = bits, U08, 14, [6:6], "Via Secondary Serial", "Via Internal CAN"
854+ caninput_sel13extsourcec = bits, U08, 14, [7:7], "INVALID", "Via Internal CAN"
855+
856+ caninput_sel14a = bits, U08, 15, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
857+ caninput_sel14b = bits, U08, 15, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
858+ caninput_sel14extsourcea = bits, U08, 15, [5:5], "Via Secondary Serial", "INVALID"
859+ caninput_sel14extsourceb = bits, U08, 15, [6:6], "Via Secondary Serial", "Via Internal CAN"
860+ caninput_sel14extsourcec = bits, U08, 15, [7:7], "INVALID", "Via Internal CAN"
861+
862+ caninput_sel15a = bits, U08, 16, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
863+ caninput_sel15b = bits, U08, 16, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
864+ caninput_sel15extsourcea = bits, U08, 16, [5:5], "Via Secondary Serial", "INVALID"
865+ caninput_sel15extsourceb = bits, U08, 16, [6:6], "Via Secondary Serial", "Via Internal CAN"
866+ caninput_sel15extsourcec = bits, U08, 16, [7:7], "INVALID", "Via Internal CAN"
867+
868+ caninput_source_can_address0 = bits, U16, 17, [0:10], $CAN_ADDRESS_HEX
869+ caninput_source_can_address1 = bits, U16, 19, [0:10], $CAN_ADDRESS_HEX
870+ caninput_source_can_address2 = bits, U16, 21, [0:10], $CAN_ADDRESS_HEX
871+ caninput_source_can_address3 = bits, U16, 23, [0:10], $CAN_ADDRESS_HEX
872+ caninput_source_can_address4 = bits, U16, 25, [0:10], $CAN_ADDRESS_HEX
873+ caninput_source_can_address5 = bits, U16, 27, [0:10], $CAN_ADDRESS_HEX
874+ caninput_source_can_address6 = bits, U16, 29, [0:10], $CAN_ADDRESS_HEX
875+ caninput_source_can_address7 = bits, U16, 31, [0:10], $CAN_ADDRESS_HEX
876+ caninput_source_can_address8 = bits, U16, 33, [0:10], $CAN_ADDRESS_HEX
877+ caninput_source_can_address9 = bits, U16, 35, [0:10], $CAN_ADDRESS_HEX
878+ caninput_source_can_address10 = bits, U16, 37, [0:10], $CAN_ADDRESS_HEX
879+ caninput_source_can_address11 = bits, U16, 39, [0:10], $CAN_ADDRESS_HEX
880+ caninput_source_can_address12 = bits, U16, 41, [0:10], $CAN_ADDRESS_HEX
881+ caninput_source_can_address13 = bits, U16, 43, [0:10], $CAN_ADDRESS_HEX
882+ caninput_source_can_address14 = bits, U16, 45, [0:10], $CAN_ADDRESS_HEX
883+ caninput_source_can_address15 = bits, U16, 47, [0:10], $CAN_ADDRESS_HEX
884+
885+ caninput_source_start_byte0 = bits, U08, 49, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
886+ caninput_source_start_byte1 = bits, U08, 50, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
887+ caninput_source_start_byte2 = bits, U08, 51, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
888+ caninput_source_start_byte3 = bits, U08, 52, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
889+ caninput_source_start_byte4 = bits, U08, 53, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
890+ caninput_source_start_byte5 = bits, U08, 54, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
891+ caninput_source_start_byte6 = bits, U08, 55, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
892+ caninput_source_start_byte7 = bits, U08, 56, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
893+ caninput_source_start_byte8 = bits, U08, 57, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
894+ caninput_source_start_byte9 = bits, U08, 58, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
895+ caninput_source_start_byte10 = bits, U08, 59, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
896+ caninput_source_start_byte11 = bits, U08, 60, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
897+ caninput_source_start_byte12 = bits, U08, 61, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
898+ caninput_source_start_byte13 = bits, U08, 62, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
899+ caninput_source_start_byte14 = bits, U08, 63, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
900+ caninput_source_start_byte15 = bits, U08, 64, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
901+
902+ caninput_source_num_bytes0 = bits, U16, 65, [0:0], "1", "2"
903+ caninput_source_num_bytes1 = bits, U16, 65, [1:1], "1", "2"
904+ caninput_source_num_bytes2 = bits, U16, 65, [2:2], "1", "2"
905+ caninput_source_num_bytes3 = bits, U16, 65, [3:3], "1", "2"
906+ caninput_source_num_bytes4 = bits, U16, 65, [4:4], "1", "2"
907+ caninput_source_num_bytes5 = bits, U16, 65, [5:5], "1", "2"
908+ caninput_source_num_bytes6 = bits, U16, 65, [6:6], "1", "2"
909+ caninput_source_num_bytes7 = bits, U16, 65, [7:7], "1", "2"
910+ caninput_source_num_bytes8 = bits, U16, 65, [8:8], "1", "2"
911+ caninput_source_num_bytes9 = bits, U16, 65, [9:9], "1", "2"
912+ caninput_source_num_bytes10 = bits, U16, 65, [10:10], "1", "2"
913+ caninput_source_num_bytes11 = bits, U16, 65, [11:11], "1", "2"
914+ caninput_source_num_bytes12 = bits, U16, 65, [12:12], "1", "2"
915+ caninput_source_num_bytes13 = bits, U16, 65, [13:13], "1", "2"
916+ caninput_source_num_bytes14 = bits, U16, 65, [14:14], "1", "2"
917+ caninput_source_num_bytes15 = bits, U16, 65, [15:15], "1", "2"
918+
919+ unused10_67 = scalar, U08, 67, "", 1, 0, 0, 255, 0
920+ unused10_68 = scalar, U08, 68, "", 1, 0, 0, 255, 0
921+
922+ enable_intcandata_out = bits, U08, 69, [0:0], "Off", "On"
923+ canoutput_sel0 = bits, U08, 70, [0:0], "Off", "On"
924+ canoutput_sel1 = bits, U08, 71, [0:0], "Off", "On"
925+ canoutput_sel2 = bits, U08, 72, [0:0], "Off", "On"
926+ canoutput_sel3 = bits, U08, 73, [0:0], "Off", "On"
927+ canoutput_sel4 = bits, U08, 74, [0:0], "Off", "On"
928+ canoutput_sel5 = bits, U08, 75, [0:0], "Off", "On"
929+ canoutput_sel6 = bits, U08, 76, [0:0], "Off", "On"
930+ canoutput_sel7 = bits, U08, 77, [0:0], "Off", "On"
931+ canoutput_param_group = array , U16, 78, [ 8], "", 1, 0, 0, 65535, 0
932+ canoutput_param_start_byte0 = bits, U08, 94, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
933+ canoutput_param_start_byte1 = bits, U08, 95, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
934+ canoutput_param_start_byte2 = bits, U08, 96, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
935+ canoutput_param_start_byte3 = bits, U08, 97, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
936+ canoutput_param_start_byte4 = bits, U08, 98, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
937+ canoutput_param_start_byte5 = bits, U08, 99, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
938+ canoutput_param_start_byte6 = bits, U08, 100, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
939+ canoutput_param_start_byte7 = bits, U08, 101, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
940+ canoutput_param_num_bytes0 = bits, U08, 102, [0:1], "INVALID", "1", "2", "INVALID"
941+ canoutput_param_num_bytes1 = bits, U08, 103, [0:1], "INVALID", "1", "2", "INVALID"
942+ canoutput_param_num_bytes2 = bits, U08, 104, [0:1], "INVALID", "1", "2", "INVALID"
943+ canoutput_param_num_bytes3 = bits, U08, 105, [0:1], "INVALID", "1", "2", "INVALID"
944+ canoutput_param_num_bytes4 = bits, U08, 106, [0:1], "INVALID", "1", "2", "INVALID"
945+ canoutput_param_num_bytes5 = bits, U08, 107, [0:1], "INVALID", "1", "2", "INVALID"
946+ canoutput_param_num_bytes6 = bits, U08, 108, [0:1], "INVALID", "1", "2", "INVALID"
947+ canoutput_param_num_bytes7 = bits, U08, 109, [0:1], "INVALID", "1", "2", "INVALID"
948+
949+ unused10_110 = scalar, U08, 110, "", 1, 0, 0, 255, 0
950+ unused10_111 = scalar, U08, 111, "", 1, 0, 0, 255, 0
951+ unused10_112 = scalar, U08, 112, "", 1, 0, 0, 255, 0
952+ unused10_113 = scalar, U08, 113, "", 1, 0, 0, 255, 0
953+
954+ speeduino_tsCanId = bits, U08, 114, [0:3], $tsCanId_list
955+ true_address = bits, U16, 115, [0:10], $CAN_ADDRESS_HEX
956+ realtime_base_address = bits, U16, 117, [0:10], $CAN_ADDRESS_HEX
957+ obd_address = bits, U16, 119, [0:10], $CAN_ADDRESS_HEX
958+
959+ Auxin0pina = bits, U08, 121, [0:5], $ANALOG_PIN
960+ Auxin1pina = bits, U08, 122, [0:5], $ANALOG_PIN
961+ Auxin2pina = bits, U08, 123, [0:5], $ANALOG_PIN
962+ Auxin3pina = bits, U08, 124, [0:5], $ANALOG_PIN
963+ Auxin4pina = bits, U08, 125, [0:5], $ANALOG_PIN
964+ Auxin5pina = bits, U08, 126, [0:5], $ANALOG_PIN
965+ Auxin6pina = bits, U08, 127, [0:5], $ANALOG_PIN
966+ Auxin7pina = bits, U08, 128, [0:5], $ANALOG_PIN
967+ Auxin8pina = bits, U08, 129, [0:5], $ANALOG_PIN
968+ Auxin9pina = bits, U08, 130, [0:5], $ANALOG_PIN
969+ Auxin10pina = bits, U08, 131, [0:5], $ANALOG_PIN
970+ Auxin11pina = bits, U08, 132, [0:5], $ANALOG_PIN
971+ Auxin12pina = bits, U08, 133, [0:5], $ANALOG_PIN
972+ Auxin13pina = bits, U08, 134, [0:5], $ANALOG_PIN
973+ Auxin14pina = bits, U08, 135, [0:5], $ANALOG_PIN
974+ Auxin15pina = bits, U08, 136, [0:5], $ANALOG_PIN
975+
976+ Auxin0pinb = bits, U08, 137, [0:5], $DIGITAL_PIN
977+ Auxin1pinb = bits, U08, 138, [0:5], $DIGITAL_PIN
978+ Auxin2pinb = bits, U08, 139, [0:5], $DIGITAL_PIN
979+ Auxin3pinb = bits, U08, 140, [0:5], $DIGITAL_PIN
980+ Auxin4pinb = bits, U08, 141, [0:5], $DIGITAL_PIN
981+ Auxin5pinb = bits, U08, 142, [0:5], $DIGITAL_PIN
982+ Auxin6pinb = bits, U08, 143, [0:5], $DIGITAL_PIN
983+ Auxin7pinb = bits, U08, 144, [0:5], $DIGITAL_PIN
984+ Auxin8pinb = bits, U08, 145, [0:5], $DIGITAL_PIN
985+ Auxin9pinb = bits, U08, 146, [0:5], $DIGITAL_PIN
986+ Auxin10pinb = bits, U08, 147, [0:5], $DIGITAL_PIN
987+ Auxin11pinb = bits, U08, 148, [0:5], $DIGITAL_PIN
988+ Auxin12pinb = bits, U08, 149, [0:5], $DIGITAL_PIN
989+ Auxin13pinb = bits, U08, 150, [0:5], $DIGITAL_PIN
990+ Auxin14pinb = bits, U08, 151, [0:5], $DIGITAL_PIN
991+ Auxin15pinb = bits, U08, 152, [0:5], $DIGITAL_PIN
992+
993+ ;unused10_137 = scalar, U08, 137, "", 1, 0, 0, 255, 0
994+ ;unused10_138 = scalar, U08, 138, "", 1, 0, 0, 255, 0
995+ ;unused10_139 = scalar, U08, 139, "", 1, 0, 0, 255, 0
996+ ;unused10_140 = scalar, U08, 140, "", 1, 0, 0, 255, 0
997+ ;unused10_141 = scalar, U08, 141, "", 1, 0, 0, 255, 0
998+ ;unused10_142 = scalar, U08, 142, "", 1, 0, 0, 255, 0
999+ ;unused10_143 = scalar, U08, 143, "", 1, 0, 0, 255, 0
1000+ ;unused10_144 = scalar, U08, 144, "", 1, 0, 0, 255, 0
1001+ ;unused10_145 = scalar, U08, 145, "", 1, 0, 0, 255, 0
1002+ ;unused10_146 = scalar, U08, 146, "", 1, 0, 0, 255, 0
1003+ ;unused10_147 = scalar, U08, 147, "", 1, 0, 0, 255, 0
1004+ ;unused10_148 = scalar, U08, 148, "", 1, 0, 0, 255, 0
1005+ ;unused10_149 = scalar, U08, 149, "", 1, 0, 0, 255, 0
1006+ ;unused10_150 = scalar, U08, 150, "", 1, 0, 0, 255, 0
1007+ ;unused10_151 = scalar, U08, 151, "", 1, 0, 0, 255, 0
1008+ ;unused10_152 = scalar, U08, 152, "", 1, 0, 0, 255, 0
1009+ ;unused10_153 = scalar, U08, 153, "", 1, 0, 0, 255, 0
1010+ iacStepperInv = bits, U08, 153, [0:0], "No", "Yes"
1011+
1012+ unused10_154 = scalar, U08, 154, "", 1, 0, 0, 255, 0
1013+ unused10_155 = scalar, U08, 155, "", 1, 0, 0, 255, 0
1014+ unused10_156 = scalar, U08, 156, "", 1, 0, 0, 255, 0
1015+ unused10_157 = scalar, U08, 157, "", 1, 0, 0, 255, 0
1016+ unused10_158 = scalar, U08, 158, "", 1, 0, 0, 255, 0
1017+ unused10_159 = scalar, U08, 159, "", 1, 0, 0, 255, 0
1018+ unused10_160 = scalar, U08, 160, "", 1, 0, 0, 255, 0
1019+ unused10_161 = scalar, U08, 161, "", 1, 0, 0, 255, 0
1020+ unused10_162 = scalar, U08, 162, "", 1, 0, 0, 255, 0
1021+ unused10_163 = scalar, U08, 163, "", 1, 0, 0, 255, 0
1022+ unused10_164 = scalar, U08, 164, "", 1, 0, 0, 255, 0
1023+ unused10_165 = scalar, U08, 165, "", 1, 0, 0, 255, 0
1024+ unused10_166 = scalar, U08, 166, "", 1, 0, 0, 255, 0
1025+ unused10_167 = scalar, U08, 167, "", 1, 0, 0, 255, 0
1026+ unused10_168 = scalar, U08, 168, "", 1, 0, 0, 255, 0
1027+ unused10_169 = scalar, U08, 169, "", 1, 0, 0, 255, 0
1028+ unused10_170 = scalar, U08, 170, "", 1, 0, 0, 255, 0
1029+ unused10_171 = scalar, U08, 171, "", 1, 0, 0, 255, 0
1030+ unused10_172 = scalar, U08, 172, "", 1, 0, 0, 255, 0
1031+ unused10_173 = scalar, U08, 173, "", 1, 0, 0, 255, 0
1032+ unused10_174 = scalar, U08, 174, "", 1, 0, 0, 255, 0
1033+ unused10_175 = scalar, U08, 175, "", 1, 0, 0, 255, 0
1034+ unused10_176 = scalar, U08, 176, "", 1, 0, 0, 255, 0
1035+ unused10_177 = scalar, U08, 177, "", 1, 0, 0, 255, 0
1036+ unused10_178 = scalar, U08, 178, "", 1, 0, 0, 255, 0
1037+ unused10_179 = scalar, U08, 179, "", 1, 0, 0, 255, 0
1038+ unused10_180 = scalar, U08, 180, "", 1, 0, 0, 255, 0
1039+ unused10_181 = scalar, U08, 181, "", 1, 0, 0, 255, 0
1040+ unused10_182 = scalar, U08, 182, "", 1, 0, 0, 255, 0
1041+ unused10_183 = scalar, U08, 183, "", 1, 0, 0, 255, 0
1042+ unused10_184 = scalar, U08, 184, "", 1, 0, 0, 255, 0
1043+ unused10_185 = scalar, U08, 185, "", 1, 0, 0, 255, 0
1044+ unused10_186 = scalar, U08, 186, "", 1, 0, 0, 255, 0
1045+ unused10_187 = scalar, U08, 187, "", 1, 0, 0, 255, 0
1046+ unused10_188 = scalar, U08, 188, "", 1, 0, 0, 255, 0
1047+ unused10_189 = scalar, U08, 189, "", 1, 0, 0, 255, 0
1048+ unused10_190 = scalar, U08, 190, "", 1, 0, 0, 255, 0
1049+ blankfield = bits, U08, 191, [0:0], "",""
1050+
1051+;[PJSC v1.01]page = 10
1052+page = 9 ;[PJSC v1.01]
1053+#if CELSIUS
1054+ crankingEnrichBins = array, U08, 0, [4], "C", 1.0, -40, -40, 215, 0
1055+#else
1056+ crankingEnrichBins = array, U08, 0, [4], "F", 1.8, -22.23, -40, 215, 0
1057+#endif
1058+ crankingEnrichValues= array, U08, 4, [4], "%", 1.0, 0.0, 0, 255, 0 ; Values for the cranking enrichment curve
1059+
1060+ rotaryType = bits , U08, 8, [0:1], "FC", "FD", "RX8", "INVALID"
1061+ stagingEnabled = bits , U08, 8, [2:2], "Off","On"
1062+ stagingMode = bits , U08, 8, [3:3], "Table","Automatic"
1063+ EMAPPin = bits, U08, 8, [4:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A8", "A10", "A11", "A12", "A13", "A14", "A15"
1064+
1065+ rotarySplitValues = array, U08, 9, [8], "degrees", 1.0, 0.0, 0.0, 40, 0
1066+#if SPEED_DENSITY
1067+ rotarySplitBins = array, U08, 17, [8], "kPa", 2.0, 0.0, 0.0, 511.0, 0
1068+#elif ALPHA_N
1069+ rotarySplitBins = array, U08, 17, [8], "TPS", 2.0, 0.0, 0.0, 100.0, 0
1070+#endif
1071+ boostSens = scalar, U16, 25, "", 1, 0, 0, 5000, 0
1072+ boostIntv = scalar, U08, 27, "ms", 1, 0, 0, 250, 0
1073+ stagedInjSizePri = scalar, U16, 28, "cc/min", 1, 0, 0, 1500, 0
1074+ stagedInjSizeSec = scalar, U16, 30, "cc/min", 1, 0, 0, 1500, 0
1075+ lnchCtrlTPS = scalar, U08, 32, "%TPS", 1, 0, 0, 100, 0
1076+
1077+ flexBoostBins = array, U08, 33, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
1078+ ; The boost range is obviously arbitrary since int16_t has ~32k in both directions
1079+ flexBoostAdj = array, S16, 39, [6], "kPa", 1.0, 0.0, -500.0, 500.0, 0
1080+ flexFuelBins = array, U08, 51, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
1081+ flexFuelAdj = array, U08, 57, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
1082+ flexAdvBins = array, U08, 63, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
1083+ flexAdvAdj = array, S08, 69, [6], "Deg", 1.0, 0.0, -125, 125.0, 0
1084+
1085+ n2o_enable = bits , U08, 75, [0:1], "Off","1 Stage","2 stage", "INVALID"
1086+ n2o_arming_pin = bits , U08, 75, [2:7], $IO_Pins_no_def
1087+#if CELSIUS
1088+ n2o_minCLT = scalar, U08, 76, "C", 1.0, -40, -40, 215, 0
1089+#else
1090+ n2o_minCLT = scalar, U08, 76, "F", 1.8, -22.23, -40, 215, 0
1091+#endif
1092+ n2o_maxMAP = scalar, U08, 77, "kPa", 2.0, 0.0, 0.0, 511.0, 0
1093+ n2o_minTPS = scalar, U08, 78, "%TPS", 1.0, 0.0, 0.0, 100, 0
1094+ n2o_maxAFR = scalar, U08, 79, "AFR", 0.1, 0.0, 0.0, 25.5, 1
1095+
1096+ n2o_stage1_pin = bits , U08, 80, [0:5], $IO_Pins_no_def
1097+ n2o_pin_polarity = bits , U08, 80, [6:6], "HIGH", "LOW"
1098+ n2o_unused = bits , U08, 80, [7:7], "No", "Yes"
1099+ n2o_stage1_minRPM = scalar, U08, 81, "RPM", 100, 0.0, 1000, 10000, 0
1100+ n2o_stage1_maxRPM = scalar, U08, 82, "RPM", 100, 0.0, 1000, 10000, 0
1101+ n2o_stage1_adderMin = scalar, U08, 83, "ms", 0.1, 0, 0, 25.5, 1
1102+ n2o_stage1_adderMax = scalar, U08, 84, "ms", 0.1, 0, 0, 25.5, 1
1103+ n2o_stage1_retard = scalar, U08, 85, "Deg", 1.0, 0.0, 0.0, 250.0, 0
1104+
1105+ n2o_stage2_pin = bits , U08, 86, [0:5], $IO_Pins_no_def
1106+ n2o_stage2_unused = bits , U08, 86, [6:7], "No", "Yes", "INVALID", "INVALID"
1107+ n2o_stage2_minRPM = scalar, U08, 87, "RPM", 100, 0.0, 1000, 10000, 0
1108+ n2o_stage2_maxRPM = scalar, U08, 88, "RPM", 100, 0.0, 1000, 10000, 0
1109+ n2o_stage2_adderMin = scalar, U08, 89, "ms", 0.1, 0, 0, 32, 1
1110+ n2o_stage2_adderMax = scalar, U08, 90, "ms", 0.1, 0, 0, 32, 1
1111+ n2o_stage2_retard = scalar, U08, 91, "Deg", 1.0, 0.0, 0.0, 250.0, 0
1112+
1113+ ; Knock settings
1114+ knock_mode = bits , U08, 92, [0:1], "Off","Digital","Analog", "INVALID"
1115+ 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"
1116+
1117+ knock_trigger = bits , U08, 93, [0:0], "HIGH", "LOW"
1118+ knock_pullup = bits , U08, 93, [1:1], "Off", "Internal pullup"
1119+ knock_limiterDisable= bits , U08, 93, [2:2], "No", "Yes"
1120+ knock_unused = bits , U08, 93, [3:4], "INVALID", "1", "2", "3"
1121+
1122+ ;Knock detection / filters
1123+ knock_count = bits , U08, 93, [5:7], "INVALID", "1", "2", "3", "4", "5", "6", "7"
1124+ knock_threshold = scalar, U08, 94, "Volts", 0.1, 0.0, 0.0, 5.0, 1
1125+ knock_maxMAP = scalar, U08, 95, "kPa", 2.0, 0.0, 0.0, 511.0, 0
1126+ knock_maxRPM = scalar, U08, 96, "RPM", 100.0, 0.0, 0, 10000, 0
1127+ knock_window_rpms = array, U08, 97, [6], "RPM", 100.0, 0.0, 0, 10000, 0
1128+ knock_window_angle = array, U08, 103, [6], "deg", 1.0, -50, -50, 100, 0
1129+ knock_window_dur = array, U08, 109, [6], "deg", 1.0, 0.0, 0, 100, 0 ;Knock window duration
1130+
1131+ ;Retard and recovery
1132+ knock_maxRetard = scalar, U08, 115, "Deg", 1.0, 0.0, 0.0, 50, 0
1133+ knock_firstStep = scalar, U08, 116, "Deg", 1.0, 0.0, 0.0, 50, 0
1134+ knock_stepSize = scalar, U08, 117, "Deg", 1.0, 0.0, 0.0, 50, 0
1135+ knock_stepTime = scalar, U08, 118, "Sec", 0.1, 0.0, 0.0, 2.5, 1
1136+
1137+ 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
1138+ knock_recoveryStepTime = scalar, U08, 120, "Sec", 0.1, 0.0, 0.0, 2.5, 1
1139+ knock_recoveryStep = scalar, U08, 121, "Deg", 1.0, 0.0, 0.0, 50, 0
1140+
1141+ unused11_122_191 = array, U08, 122,[69],"RPM", 100.0, 0.0, 100, 25500, 0
1142+
1143+;-------------------------------------------------------
1144+;Page 11 is the fuel map and axis bins only [PJSC v1.01]
1145+;-------------------------------------------------------
1146+;[PJSC v1.01]page = 11
1147+page = 10 ;[PJSC v1.01]
1148+ ; name = bits, type, offset, bits
1149+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
1150+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
1151+ veTable2 = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
1152+ rpmBinsVE2 = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
1153+ fuelLoadBins2 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits2 , algorithm2) }, 1.0, 0.0, 0.0, {fuelLoadMax}, 0
1154+
1155+;-------------------------------------------------------
1156+;Page 12 is the fuel map and axis bins only [PJSC v1.01]
1157+;-------------------------------------------------------
1158+;[PJSC v1.01]page = 12
1159+page = 11 ;[PJSC v1.01]
1160+ ; name = bits, type, offset, bits
1161+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
1162+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
1163+ veTable3 = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
1164+ rpmBinsVE3 = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
1165+ fuelLoadBins3 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits2 , algorithm3) }, 1.0, 0.0, 0.0, {fuelLoadMax}, 0
1166+
1167+;-------------------------------------------------------------------------------
1168+
1169+[ConstantsExtensions]
1170+ requiresPowerCycle = nCylinders
1171+ requiresPowerCycle = pinLayout
1172+ requiresPowerCycle = fanPin
1173+ requiresPowerCycle = reqFuel
1174+ requiresPowerCycle = numTeeth
1175+ requiresPowerCycle = missingTeeth
1176+ requiresPowerCycle = trigPatternSec
1177+ requiresPowerCycle = injOpen
1178+ requiresPowerCycle = IgInv
1179+ requiresPowerCycle = fanInv
1180+ requiresPowerCycle = boostEnabled
1181+ requiresPowerCycle = vvtEnabled
1182+; requiresPowerCycle = vvtChannels
1183+ requiresPowerCycle = boostFreq
1184+ requiresPowerCycle = vvtFreq
1185+ requiresPowerCycle = idleFreq
1186+ requiresPowerCycle = sparkMode
1187+ requiresPowerCycle = launchPin
1188+ requiresPowerCycle = launchEnable
1189+ requiresPowerCycle = launchHiLo
1190+ requiresPowerCycle = flexEnabled
1191+ requiresPowerCycle = oddfire2
1192+ requiresPowerCycle = oddfire3
1193+ requiresPowerCycle = oddfire4
1194+ requiresPowerCycle = iacCLminDuty
1195+ requiresPowerCycle = iacCLmaxDuty
1196+ requiresPowerCycle = useExtBaro
1197+ requiresPowerCycle = useEMAP
1198+ requiresPowerCycle = baroPin
1199+ requiresPowerCycle = rotaryType
1200+ requiresPowerCycle = stagedInjSizePri
1201+ requiresPowerCycle = stagedInjSizeSec
1202+ requiresPowerCycle = stagingEnabled
1203+ requiresPowerCycle = resetControl
1204+ requiresPowerCycle = resetControlPin
1205+ requiresPowerCycle = n2o_enable
1206+ requiresPowerCycle = n2o_arming_pin
1207+ requiresPowerCycle = n2o_pin_polarity
1208+ requiresPowerCycle = knock_mode
1209+ requiresPowerCycle = knock_pin
1210+ requiresPowerCycle = knock_trigger
1211+ requiresPowerCycle = knock_pullup
1212+ requiresPowerCycle = idleUpEnabled
1213+ requiresPowerCycle = pjscFreq ;[PJSC]
1214+ requiresPowerCycle = squirtDeviceType ; |
1215+ requiresPowerCycle = multiVEmapEnabled ; |
1216+ requiresPowerCycle = exTrigModeSelect ; |
1217+ requiresPowerCycle = exValveCaptureEnabled ; |
1218+ requiresPowerCycle = dutyPulseCaptureEnabled ; V
1219+ requiresPowerCycle = dutyPulseCaptureEnabled2 ;[PJSC]
1220+ requiresPowerCycle = muxout1selection ;[PJSC v1.01]
1221+ requiresPowerCycle = muxout2selection ;[PJSC v1.01]
1222+ requiresPowerCycle = muxout3selection ;[PJSC v1.01]
1223+ requiresPowerCycle = muxout4selection ;[PJSC v1.01]
1224+ requiresPowerCycle = algorithm2 ;[PJSC v1.01]
1225+ requiresPowerCycle = algorithm3 ;[PJSC v1.01]
1226+ requiresPowerCycle = secondaryFuelUsage ;[PJSC v1.01]
1227+ requiresPowerCycle = table4Usage ;[PJSC v1.01]
1228+
1229+ requiresPowerCycle = caninput_sel0a
1230+ requiresPowerCycle = caninput_sel0b
1231+ requiresPowerCycle = caninput_sel1a
1232+ requiresPowerCycle = caninput_sel1b
1233+ requiresPowerCycle = caninput_sel2a
1234+ requiresPowerCycle = caninput_sel2b
1235+ requiresPowerCycle = caninput_sel3a
1236+ requiresPowerCycle = caninput_sel3b
1237+ requiresPowerCycle = caninput_sel4a
1238+ requiresPowerCycle = caninput_sel4b
1239+ requiresPowerCycle = caninput_sel5a
1240+ requiresPowerCycle = caninput_sel5b
1241+ requiresPowerCycle = caninput_sel6a
1242+ requiresPowerCycle = caninput_sel6b
1243+ requiresPowerCycle = caninput_sel7a
1244+ requiresPowerCycle = caninput_sel7b
1245+ requiresPowerCycle = caninput_sel8a
1246+ requiresPowerCycle = caninput_sel8b
1247+ requiresPowerCycle = caninput_sel9a
1248+ requiresPowerCycle = caninput_sel9b
1249+ requiresPowerCycle = caninput_sel10a
1250+ requiresPowerCycle = caninput_sel10b
1251+ requiresPowerCycle = caninput_sel11a
1252+ requiresPowerCycle = caninput_sel11b
1253+ requiresPowerCycle = caninput_sel12a
1254+ requiresPowerCycle = caninput_sel12b
1255+ requiresPowerCycle = caninput_sel13a
1256+ requiresPowerCycle = caninput_sel13b
1257+ requiresPowerCycle = caninput_sel14a
1258+ requiresPowerCycle = caninput_sel14b
1259+ requiresPowerCycle = caninput_sel15a
1260+ requiresPowerCycle = caninput_sel15b
1261+
1262+ defaultValue = pinLayout, 1
1263+ defaultValue = TrigPattern, 0
1264+ defaultValue = useResync, 1
1265+ defaultValue = trigPatternSec, 0
1266+ defaultValue = sparkMode, 0
1267+ defaultValue = indInjAng, 0
1268+ defaultValue = inj1Ang, 355
1269+ defaultValue = inj2Ang, 355
1270+ defaultValue = inj3Ang, 355
1271+ defaultValue = inj4Ang, 355
1272+ defaultValue = nInjectors, 4
1273+ defaultValue = dutyLim, 80
1274+ defaultValue = mapMin, 10
1275+ defaultValue = mapMax, 260
1276+ defaultValue = baroMin 10
1277+ defaultValue = baroMax, 260
1278+ defaultValue = useEMAP, 0
1279+ defaultValue = EMAPMin, 10
1280+ defaultValue = EMAPMax, 260
1281+ defaultValue = fpPrime, 3
1282+ defaultValue = TrigFilter, 0
1283+ defaultValue = ignCranklock,0
1284+ defaultValue = multiplyMAP, 0
1285+ defaultValue = includeAFR, 0
1286+ defaultValue = stoich, 14.7
1287+ defaultValue = flexEnabled, 0
1288+ defaultValue = oddfire2, 0
1289+ defaultValue = oddfire3, 0
1290+ defaultValue = oddfire4, 0
1291+ defaultValue = flexFreqLow, 50
1292+ defaultValue = flexFreqHigh,150
1293+ defaultValue = fuelPumpPin, 0
1294+ defaultValue = fanPin, 0
1295+ defaultValue = iacCLminDuty,0
1296+ defaultValue = iacCLmaxDuty,100
1297+ defaultValue = boostMinDuty,0
1298+ defaultValue = boostMaxDuty,100
1299+ defaultValue = boostSens, 2000
1300+ defaultValue = boostIntv, 30
1301+ defaultValue = sparkDur, 1.0
1302+ defaultValue = fixAngEnable,0
1303+ defaultValue = n2o_enable, 0
1304+ defaultValue = speeduino_tsCanId, 0
1305+ defaultValue = true_address, 256
1306+ defaultValue = realtime_base_address, 336
1307+ defaultValue = VVTasOnOff, 0
1308+ defaultValue = stagingEnabled, 0
1309+ defaultValue = lnchCtrlTPS, 0
1310+ defaultValue = resetControl, 0
1311+ defaultValue = bootloaderCaps, 0
1312+ defaultValue = taeTaperMin, 1000
1313+ defaultValue = taeTaperMax, 5000
1314+ ; defaultValue = obd_address, 0
1315+
1316+ defaultValue = multiVEmapEnabled, 0 ;[PJSC]
1317+ defaultValue = pjscFreq, 14 ; |
1318+ defaultValue = veMapSelection1Pri, 0 ; |
1319+ defaultValue = veMapSelection1Sec, 0 ; |
1320+ defaultValue = veMapSelection2Pri, 0 ; |
1321+ defaultValue = veMapSelection2Sec, 0 ; |
1322+ defaultValue = veMapSelection3Pri, 0 ; |
1323+ defaultValue = veMapSelection3Sec, 0 ; |
1324+ defaultValue = veMapSelection4Pri, 0 ; |
1325+ defaultValue = veMapSelection4Sec, 0 ; |
1326+ defaultValue = veMapSelection1_2Pri, 0 ; |
1327+ defaultValue = veMapSelection1_2Sec, 0 ; |
1328+ defaultValue = veMapSelection2_2Pri, 0 ; |
1329+ defaultValue = veMapSelection2_2Sec, 0 ; |
1330+ defaultValue = veMapSelection3_2Pri, 0 ; |
1331+ defaultValue = veMapSelection3_2Sec, 0 ; |
1332+ defaultValue = veMapSelection4_2Pri, 0 ; |
1333+ defaultValue = veMapSelection4_2Sec, 0 ; |
1334+ defaultValue = exTrigModeSelect, 0 ; |
1335+ defaultValue = exValveCaptureEnabled, 1 ; |
1336+ defaultValue = dutyPulseCaptureEnabled, 0 ; V
1337+ defaultValue = dutyPulseCaptureEnabled2, 0 ;[PJSC]
1338+ defaultValue = exValveCalibrationMode, 0 ;[PJSC v1.01]
1339+ defaultValue = exValvePosMin, 0 ; |
1340+ defaultValue = exValvePosMax, 100 ; |
1341+ defaultValue = exTrigHysteresis, 10 ; |
1342+ defaultValue = squirtDeviceType, 0 ; |
1343+ defaultValue = externalTrigEdge, 0 ; |
1344+ defaultValue = dutyPulseOnLevel, 0 ; |
1345+ defaultValue = dutyPulseOnLevel2, 0 ; |
1346+ defaultValue = dutyFreqTst1, 10 ; |
1347+ defaultValue = dutyFreqTst2, 10 ; |
1348+ defaultValue = dutyFreqTst3, 10 ; |
1349+ defaultValue = dutyFreqTst4, 10 ; |
1350+ defaultValue = dutyRatioTst1, 50 ; |
1351+ defaultValue = dutyRatioTst2, 50 ; |
1352+ defaultValue = dutyRatioTst3, 50 ; |
1353+ defaultValue = dutyRatioTst4, 50 ; |
1354+ defaultValue = testop_fp, 0 ; |
1355+ defaultValue = testop_inj, 0 ; |
1356+ defaultValue = testop_coil, 0 ; |
1357+ defaultValue = testsel_inj, 0 ; |
1358+ defaultValue = testsel_coil, 0 ; |
1359+ defaultValue = testint, 10.0 ; |
1360+ defaultValue = testpw, 0 ; |
1361+ defaultValue = testinjcnt, 0 ; |
1362+ defaultValue = muxout1selection, 0 ; V
1363+ defaultValue = muxout2selection, 0 ;[PJSC v1.01]
1364+ defaultValue = muxout3selection, 0 ;[PJSC v1.01]
1365+ defaultValue = muxout4selection, 0 ;[PJSC v1.01]
1366+#if table4_fuel ;[PJSC v1.01] For switching table4
1367+ defaultValue = table4Usage, 0 ;[PJSC v1.01]
1368+#endif ;[PJSC v1.01] For switching table4
1369+#if table4_spark ;[PJSC v1.01] For switching table4
1370+ defaultValue = table4Usage, 1 ;[PJSC v1.01]
1371+#endif ;[PJSC v1.01] For switching table4
1372+ defaultValue = inj1SquirtStartEnd, 0 ;[PJSC v1.01]
1373+ defaultValue = inj2SquirtStartEnd, 0 ;[PJSC v1.01]
1374+ defaultValue = inj3SquirtStartEnd, 0 ;[PJSC v1.01]
1375+ defaultValue = inj4SquirtStartEnd, 0 ;[PJSC v1.01]
1376+
1377+ ;Default pins
1378+ defaultValue = fanPin, 0
1379+ defaultValue = vvtPin, 0
1380+ defaultValue = launchPin, 0
1381+ defaultValue = boostPin, 0
1382+ defaultValue = fuelPumpPin, 0
1383+ defaultValue = tachoPin, 0
1384+ defaultValue = perToothIgn, 0
1385+ defaultValue = resetControlPin, 0
1386+
1387+ ;Default ADC filter values
1388+ defaultValue = ADCFILTER_TPS 50
1389+ defaultValue = ADCFILTER_CLT 180
1390+ defaultValue = ADCFILTER_IAT 180
1391+ defaultValue = ADCFILTER_O2 100
1392+ defaultValue = ADCFILTER_BAT 128
1393+ defaultValue = ADCFILTER_MAP 20 ;This is only used on Instantaneous MAP readings and is intentionally very weak to allow for faster response
1394+ defaultValue = ADCFILTER_BARO 64
1395+ ;Force the controller priority for the filters (Controller knows best here when in doubt)
1396+ controllerPriority = ADCFILTER_TPS
1397+ controllerPriority = ADCFILTER_CLT
1398+ controllerPriority = ADCFILTER_IAT
1399+ controllerPriority = ADCFILTER_O2
1400+ controllerPriority = ADCFILTER_BAT
1401+ controllerPriority = ADCFILTER_MAP
1402+ controllerPriority = ADCFILTER_BARO
1403+ ;Again, force the setting from the controller for the trigger edges. This is particularly useful for the Oct 2018 update where the names of the dges changed
1404+ controllerPriority = TrigEdge
1405+ controllerPriority = TrigEdgeSec
1406+
1407+ ;These are the limits for each of the load algorithms (Refer to the PC Variables section)
1408+ ;Order is: MAP TPS IMAP/EMAP ITB UNUSED UNUSED UNUSED UNUSED
1409+;[PJSC v1.01] defaultValue = algorithmLimits, 511 100 511 511 100 100 100 100
1410+ defaultValue = algorithmLimits, 255 100 255 255 100 100 100 100
1411+#if SPEED_DENSITY
1412+;[PJSC v1.01] defaultValue = fuelLoadMax, 511
1413+;[PJSC v1.01] defaultValue = ignLoadMax, 511
1414+ defaultValue = fuelLoadMax, 255
1415+ defaultValue = ignLoadMax, 255
1416+#else
1417+;[PJSC v1.01] defaultValue = fuelLoadMax, 511
1418+;[PJSC v1.01] defaultValue = ignLoadMax, 511
1419+ defaultValue = fuelLoadMax, 255
1420+ defaultValue = ignLoadMax, 255
1421+#endif
1422+
1423+ controllerPriority = bootloaderCaps
1424+
1425+ defaultValue = AUXin00Alias Aux0
1426+ defaultValue = AUXin01Alias Aux1
1427+ defaultValue = AUXin02Alias Aux2
1428+ defaultValue = AUXin03Alias Aux3
1429+ defaultValue = AUXin04Alias Aux4
1430+ defaultValue = AUXin05Alias Aux5
1431+ defaultValue = AUXin06Alias Aux6
1432+ defaultValue = AUXin07Alias Aux7
1433+ defaultValue = AUXin08Alias Aux8
1434+ defaultValue = AUXin09Alias Aux9
1435+ defaultValue = AUXin10Alias Aux10
1436+ defaultValue = AUXin11Alias Aux11
1437+ defaultValue = AUXin12Alias Aux12
1438+ defaultValue = AUXin13Alias Aux13
1439+ defaultValue = AUXin14Alias Aux14
1440+ defaultValue = AUXin15Alias Aux15
1441+
1442+[Menu]
1443+
1444+ ;----------------------------------------------------------------------------
1445+ ; There are five pre-defined values that may be used to define your menus.
1446+ ; The first four allow access to the "standard" dialog boxes, the last one
1447+ ; merely draws a separator (horizontal line) in the menu.
1448+ ;
1449+ ; std_constants
1450+ ; std_enrichments
1451+ ; std_realtime
1452+ ; std_warmup
1453+ ;
1454+ ; std_separator
1455+ ;
1456+ ; If you use any of the std_constants, std_enrichments or std_warmup
1457+ ; editors, they may be optionally suffixed with a page number (only
1458+ ; useful for multi-page code variants), which causes them to edit the
1459+ ; specified page. If you leave off the page specifier, they edit logical
1460+ ; page one as specified in the Constants section.
1461+ ;
1462+ ; There are four special menu names, which when used append to the standard
1463+ ; menus of the same name instead of creating a new one. The menu names
1464+ ; are "File", "Communications", "Tools" and "Help".
1465+ ;
1466+ ;----------------------------------------------------------------------------
1467+
1468+menuDialog = main
1469+
1470+ menu = "Settings"
1471+ subMenu = engine_constants, "Engine Constants"
1472+;[PJSC v1.01] subMenu = injChars, "Injector Characteristics"
1473+ subMenu = triggerSettings, "Trigger Setup"
1474+ ;subMenu = OLED, "OLED Setup"
1475+ subMenu = airdensity_curve, "IAT Density"
1476+ subMenu = barodensity_curve, "Baro Density", { baroCorr } ;[PJSC v1.01]
1477+ subMenu = reset_control, "Reset Control"
1478+
1479+
1480+ menu = "&Tuning"
1481+ subMenu = std_realtime, "Realtime Display"
1482+ subMenu = std_separator ;[PJSC v1.01]
1483+ subMenu = injChars, "Injector Characteristics" ;[PJSC v1.01]
1484+ subMenu = accelEnrichments, "Acceleration Enrichment"
1485+ subMenu = egoControl, "AFR/O2", 3
1486+#if table4_spark ;[PJSC v1.01] For switching table4
1487+ subMenu = RevLimiterS, "Limiters", 2
1488+#endif ;[PJSC v1.01] For switching table4
1489+;[PJSC] subMenu = flexFueling, "Flex Fuel", 2
1490+;[PJSC] subMenu = veTableDialog, "VE Table", 0
1491+;[PJSC] subMenu = sparkTbl, "Spark Table", 2
1492+ subMenu = std_separator ;[PJSC v1.01]
1493+ subMenu = veMapSelectDialog, "VE Table configuration" ;[PJSC]
1494+ subMenu = veTable1Dialog, "&VE Table 1", 0 ; V
1495+ subMenu = veTable2Dialog, "&VE Table 2", 0, { multiVEmapEnabled } ;[PJSC]
1496+ subMenu = veTable3Dialog, "&VE Table 3", 0, { multiVEmapEnabled } ;[PJSC v1.01]
1497+#if table4_fuel ;[PJSC v1.01] For switching table4
1498+ subMenu = veTable4Dialog, "&VE Table 4", 0, { multiVEmapEnabled } ;[PJSC v1.01]
1499+#endif ;[PJSC v1.01] For switching table4
1500+ subMenu = afrTable1Tbl, "AFR Table", 5
1501+ subMenu = std_separator
1502+;[PJSC v1.01] subMenu = inj_trimad, "Sequential fuel trim", 9
1503+ subMenu = stagingTableDialog, "Staged Injection", 10, { nCylinders <= 4 } ; Can't do staging on more than 4 cylinder engines
1504+
1505+#if table4_spark ;[PJSC v1.01] For switching table4
1506+ menu = "&Spark"
1507+ subMenu = sparkSettings, "Spark Settings"
1508+ subMenu = sparkTbl, "Spark Table", 2
1509+ subMenu = dwellSettings, "Dwell settings"
1510+ subMenu = dwell_correction_curve, "Dwell Compensation"
1511+ subMenu = iat_retard_curve, "IAT Retard"
1512+ ;subMenu = knockSettings, "Knock Settings"
1513+ subMenu = rotary_ignition, "Rotary Ignition", { sparkMode == 4 }
1514+#endif ;[PJSC v1.01] For switching table4
1515+
1516+ menu = "&Starting/Idle"
1517+ subMenu = crankPW, "Cranking Settings"
1518+ subMenu = warmup, "Warmup Enrichment"
1519+ subMenu = std_separator
1520+;[PJSC v1.01] subMenu = idleSettings, "Idle Control"
1521+;[PJSC v1.01] subMenu = iacClosedLoop_curve, "Idle - Closed loop targets", 7, { iacAlgorithm == 3 || iacAlgorithm == 5 }
1522+;[PJSC v1.01] subMenu = iacPwm_curve, "Idle - PWM Duty Cycle", 7, { iacAlgorithm == 2 }
1523+;[PJSC v1.01] subMenu = iacPwmCrank_curve, "Idle - PWM Cranking Duty Cycle", 7, { iacAlgorithm == 2 }
1524+;[PJSC v1.01] subMenu = iacStep_curve, "Idle - Stepper Motor", 7, { iacAlgorithm == 4 }
1525+;[PJSC v1.01] subMenu = iacStepCrank_curve, "Idle - Stepper Motor Cranking", 7, { iacAlgorithm == 4 }
1526+;[PJSC v1.01] subMenu = std_separator
1527+;[PJSC v1.01] subMenu = idleUpSettings, "Idle Up Settings", { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 4 || iacAlgorithm == 5 }
1528+ subMenu = idleSettings, "Idle Control", { muxout1selection == 1 || muxout2selection == 1 } ;[PJSC v1.01] For MUX selection
1529+ subMenu = iacClosedLoop_curve, "Idle - Closed loop targets", 7, { (iacAlgorithm == 3 || iacAlgorithm == 5) && (muxout1selection == 1 || muxout2selection == 1) } ; |
1530+ subMenu = iacPwm_curve, "Idle - PWM Duty Cycle", 7, { iacAlgorithm == 2 && (muxout1selection == 1 || muxout2selection == 1) } ; V
1531+ subMenu = iacPwmCrank_curve, "Idle - PWM Cranking Duty Cycle", 7, { iacAlgorithm == 2 && (muxout1selection == 1 || muxout2selection == 1) } ;[PJSC v1.01] For MUX selection
1532+
1533+ menu = "&Accessories"
1534+ subMenu = muxoutSetting, "MUX Output Port Setting" ;[PJSC v1.01]
1535+ subMenu = std_separator ;[PJSC v1.01]
1536+;[PJSC v1.01] subMenu = fanSettings, "Thermo Fan"
1537+#if table4_spark ;[PJSC v1.01] For switching table4
1538+ subMenu = LaunchControl, "Launch Control / Flat Shift"
1539+;[PJSC v1.01] subMenu = fuelpump, "Fuel Pump"
1540+ subMenu = NitrousControl, "Nitrous"
1541+#endif ;[PJSC v1.01] For switching table4
1542+;[PJSC v1.01] subMenu = std_separator
1543+;[PJSC v1.01] subMenu = boostSettings, "Boost Control"
1544+;[PJSC v1.01] subMenu = boostLoad, "Boost Targets/Load", 8, { boostEnabled }
1545+;[PJSC v1.01] subMenu = std_separator
1546+;[PJSC v1.01] subMenu = vvtSettings, "VVT Control"
1547+;[PJSC v1.01] subMenu = vvtTbl, "VVT duty cycle", 8, { vvtEnabled }
1548+;[PJSC v1.01] subMenu = std_separator
1549+;[PJSC v1.01] subMenu = tacho, "Tacho Output"
1550+ subMenu = fanSettings, "Thermo Fan", { muxout1selection == 2 || muxout2selection == 2 } ;[PJSC v1.01] For MUX selection
1551+ subMenu = fuelpump, "Fuel Pump", { muxout1selection == 4 || muxout2selection == 4 } ; |
1552+ subMenu = std_separator ; |
1553+ subMenu = boostSettings, "Boost Control", { muxout1selection == 5 || muxout2selection == 5 } ; |
1554+ subMenu = boostTbl, "Boost target", 8, { boostEnabled && (muxout1selection == 5 || muxout2selection == 5) } ; |
1555+ subMenu = std_separator ; |
1556+ subMenu = vvtSettings, "VVT Control", { muxout1selection == 6 || muxout2selection == 6 } ; |
1557+ subMenu = vvtTbl, "VVT duty cycle", 8, { vvtEnabled && (muxout1selection == 6 || muxout2selection == 6) } ; |
1558+ subMenu = std_separator ; V
1559+ subMenu = tacho, "Tacho Output", { muxout1selection == 7 || muxout2selection == 7 } ;[PJSC v1.01] For MUX selection
1560+
1561+ subMenu = std_separator ;[PJSC]
1562+ subMenu = inputPortSetting, "Input Port Setting" ;[PJSC]
1563+
1564+ subMenu = std_separator
1565+
1566+ #if CAN_COMMANDS
1567+ subMenu = can_serial3IO, "Canbus/Secondary Serial IO Interface"
1568+ subMenu = std_separator
1569+ subMenu = Canin_config, "External Auxillary Input Channel Configuration", {enable_secondarySerial || (enable_intcan && intcan_available)}
1570+ subMenu = Auxin_config, "Local Auxillary Input Channel Configuration"
1571+ ;subMenu = std_separator
1572+ ;subMenu = Canout_config, "Canbus Output Configuration"
1573+ #else
1574+ subMenu = serial3IO, "Canbus/Secondary Serial IO Interface"
1575+ subMenu = std_separator
1576+ subMenu = Canin_config, "External Auxillary Input Channel Configuration", {enable_secondarySerial || (enable_intcan && intcan_available)}
1577+ subMenu = Auxin_config, "Local Auxillary Input Channel Configuration"
1578+ #endif
1579+
1580+ menuDialog = main
1581+ menu = "Tools"
1582+ subMenu = mapCal, "Calibrate Pressure Sensors"
1583+ subMenu = std_ms2gentherm, "Calibrate Temperature Sensors", 0
1584+ subMenu = std_ms2geno2, "Calibrate AFR Sensor", 0
1585+ subMenu = sensorFilters, "Set analog sensor filters"
1586+
1587+ menuDialog = main
1588+ menu = "3D &Tuning Maps"
1589+;[PJSC] subMenu = veTable1Map, "Fuel Table"
1590+;[PJSC] subMenu = sparkMap, "Spark Table", 3
1591+ subMenu = veTable1Map, "Fuel Table 1" ;[PJSC]
1592+ subMenu = veTable2Map, "Fuel Table 2" ;[PJSC]
1593+ subMenu = veTable3Map, "Fuel Table 3" ;[PJSC v1.01] For switching table4
1594+#if table4_fuel ;[PJSC v1.01] For switching table4
1595+ subMenu = sparkMap, "Fuel Table 4" ;[PJSC v1.01] For switching table4
1596+#endif ;[PJSC v1.01] For switching table4
1597+ subMenu = afrTable1Map, "AFR Target Table"
1598+#if table4_spark ;[PJSC v1.01] For switching table4
1599+ subMenu = sparkMap, "Spark Table", 3 ;[PJSC v1.01] For switching table4
1600+#endif ;[PJSC v1.01] For switching table4
1601+
1602+
1603+#if enablehardware_test
1604+ menuDialog = main
1605+ menu = "Hardware Testing"
1606+;[PJSC v1.01] subMenu = outputtest1, "Test Output Hardware"
1607+ subMenu = outputtest1, "Output Test Mode - PWM" ;[PJSC v1.01]
1608+ subMenu = outputtest2, "Output Test Mode - Pulse" ;[PJSC v1.01]
1609+#endif
1610+
1611+ menu = "Help"
1612+ subMenu = helpGeneral, "Speeduino Help"
1613+;-------------------------------------------------------------------------------
1614+
1615+[SettingContextHelp]
1616+; constantName = "Help Text"
1617+; These provide the context help in the dialog when these variables are used
1618+ nCylinders = "Cylinder count"
1619+ 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."
1620+ 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."
1621+ twoStroke = "Four-Stroke (most engines), Two-stroke."
1622+ nInjectors = "Number of primary injectors."
1623+ 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"
1624+ stoich = "The stoichiometric ration of the fuel being used. For flex fuel, choose the primary fuel"
1625+ 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. "
1626+
1627+ TrigPattern = "The type of input trigger decoder to be used."
1628+ 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."
1629+ trigPatternSec = "Cam mode/type also known as Secondary Trigger Pattern."
1630+ numTeeth = "Number of teeth on Primary Wheel."
1631+ TrigSpeed = "Primary trigger speed."
1632+ missingTeeth= "Number of Missing teeth on Primary Wheel."
1633+ 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."
1634+ TrigAngMul = "A multiplier used by non-360 degree tooth wheels (i.e. Wheels where the tooth count doesn't divide evenly into 360. Usage: (360 * <multiplier>) / tooth_count = Whole number"
1635+ SkipCycles = "The number of revolutions that will be skipped during cranking before the injectors and coils are fired."
1636+ TrigEdge = "The Trigger edge of the primary sensor.\nLeading.\nTrailing."
1637+ TrigEdgeSec = "The Trigger edge of the secondary (Cam) sensor.\nLeading.\nTrailing."
1638+ 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"
1639+
1640+ 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. No valid for >4 cylinders"
1641+ 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!)"
1642+ sparkDur = "The duration of the spark at full dwell. Typically around 1ms"
1643+ fixAngEnable= "If enabled, timing will be locked/fixed and the ignition map will be ignored. Note that this value will be overriden by the fixed cranking value when cranking"
1644+ FixAng = "Timing will be locked at this value if the above is enabled"
1645+
1646+ crankRPM = "The cranking RPM threshold. When RPM is lower than this value (and above 0) the system will be considered to be cranking"
1647+
1648+ fanInv = ""
1649+ fanHyster = "The number of degrees of hysteresis to be used in controlling the fan. Recommended values are between 2 and 5"
1650+
1651+ taeTime = "The duration of the acceleration enrichment"
1652+
1653+ iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves."
1654+ iacStepTime = "Pause time between each step. Values that are too low can cause the motor to behave erratically or not at all"
1655+ iacStepHome = "Homing steps to perform on startup. Must be greater than the fully open steps value"
1656+ iacStepHyster = "The minimum number of steps to move in any one go."
1657+ 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)."
1658+ iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
1659+ iacCLminDuty= "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
1660+ iacCLmaxDuty= "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
1661+ iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
1662+ 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."
1663+ 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"
1664+
1665+ oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1"
1666+ oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)"
1667+ oddfire4 = "The ATDC angle of channel 4 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 3)"
1668+
1669+ dfcoRPM = "The RPM above which DFCO will be active. Typically set a few hundred RPM above maximum idle speed"
1670+ 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"
1671+ 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"
1672+
1673+ 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"
1674+ 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"
1675+ 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"
1676+ 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"
1677+ 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."
1678+ ignCranklock = "On certain low resolution ignition patterns, the cranking timing can be locked to occur when a pulse is recieved."
1679+
1680+ multiplyMAP = "If enabled, the MAP reading is included directly into the pulsewidth calculation by multiplying the VE lookup value by the MAP:Baro ratio. This results in a flatter VE table that can be easier to tune in some instances. VE table must be retuned when this value is changed."
1681+ 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. "
1682+ 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."
1683+
1684+ flexEnabled = "Turns on readings from the Flex sensor and enables the below adjustments"
1685+ flexFreqLow = "The frequency of the sensor at 0% ethanol (50Hz for standard GM/Continental sensor)"
1686+ flexFreqHigh = "The frequency of the sensor at 100% ethanol (150Hz for standard GM/Continental sensor)"
1687+ flexFuelAdj = "Fuel % to be used for the current ethanol % (Typically 100% @ 0%, 163% @ 100%)"
1688+ flexAdvAdj = "Additional advance (in degrees) for the current ethanol % (Typically 0 @ 0%, 10-20 @ 100%)"
1689+ flexBoostAdj = "Adjustment, in kPa, to the boost target for the current ethanol %. Negative values are allowed to lower boost at lower ethanol % if necessary."
1690+
1691+ n2o_arming_pin = "Pin that the nitrous arming/enagement switch is on."
1692+ 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."
1693+
1694+ flatSArm = "The RPM switch point that determines whether an eganged clutch is for launch control or flat shift. Below this figure, an engaged clutch is considered to be for launch, above this figure an active clutch input will be considered a flat shift. This should be set at least several hundred RPM above idle"
1695+ 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"
1696+ flatSRetard = "The absolute timing (BTDC) that will be used when within the soft limit window"
1697+ hardCutType = "How hard cuts should be performed for rev/launch limits. Full cut will stop all ignition events, Rolling cut will step through all ignition outputs, only cutting 1 per revolution"
1698+
1699+ enable_secondarySerial = "This Enables the secondary serial port . Secondary serial is serial3 on mega2560 processor, and Serial2 on STM32 and Teensy processor "
1700+
1701+ ;speeduino_tsCanId = "This is the TsCanId that the Speeduino ECU will respond to. This should match the main controller CAN ID in project properties if it is connected directy to TunerStudio, Otherwise the device ID if connected via CAN passthrough"
1702+ true_address = "This is the 11bit Can address of the Speeduino ECU "
1703+ 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"
1704+ ;obd_address = "The 11bit Can address that the Speeduino ECU responds to for OBD2 diagnostic requests"
1705+ AUXin00Alias = "The Ascii alias asigned to Aux input channel 0"
1706+ AUXin01Alias = "The Ascii alias asigned to Aux input channel 1"
1707+ AUXin02Alias = "The Ascii alias asigned to Aux input channel 2"
1708+ AUXin03Alias = "The Ascii alias asigned to Aux input channel 3"
1709+ AUXin04Alias = "The Ascii alias asigned to Aux input channel 4"
1710+ AUXin05Alias = "The Ascii alias asigned to Aux input channel 5"
1711+ AUXin06Alias = "The Ascii alias asigned to Aux input channel 6"
1712+ AUXin07Alias = "The Ascii alias asigned to Aux input channel 7"
1713+ AUXin08Alias = "The Ascii alias asigned to Aux input channel 8"
1714+ AUXin09Alias = "The Ascii alias asigned to Aux input channel 9"
1715+ AUXin10Alias = "The Ascii alias asigned to Aux input channel 10"
1716+ AUXin11Alias = "The Ascii alias asigned to Aux input channel 11"
1717+ AUXin12Alias = "The Ascii alias asigned to Aux input channel 12"
1718+ AUXin13Alias = "The Ascii alias asigned to Aux input channel 13"
1719+ AUXin14Alias = "The Ascii alias asigned to Aux input channel 14"
1720+ AUXin15Alias = "The Ascii alias asigned to Aux input channel 15"
1721+
1722+ caninput_sel0a = "This Enables local analog/digital on input channel 0 "
1723+ caninput_sel1a = "This Enables local analog/digital on input channel 1 "
1724+ caninput_sel2a = "This Enables local analog/digital on input channel 2 "
1725+ caninput_sel3a = "This Enables local analog/digital on input channel 3 "
1726+ caninput_sel4a = "This Enables local analog/digital on input channel 4 "
1727+ caninput_sel5a = "This Enables local analog/digital on input channel 5 "
1728+ caninput_sel6a = "This Enables local analog/digital on input channel 6 "
1729+ caninput_sel7a = "This Enables local analog/digital on input channel 7 "
1730+ caninput_sel8a = "This Enables local analog/digital on input channel 8 "
1731+ caninput_sel9a = "This Enables local analog/digital on input channel 9 "
1732+ caninput_sel10a = "This Enables local analog/digital on input channel 10 "
1733+ caninput_sel11a = "This Enables local analog/digital on input channel 11 "
1734+ caninput_sel12a = "This Enables local analog/digital on input channel 12 "
1735+ caninput_sel13a = "This Enables local analog/digital on input channel 13 "
1736+ caninput_sel14a = "This Enables local analog/digital on input channel 14 "
1737+ caninput_sel15a = "This Enables local analog/digital on input channel 15 "
1738+
1739+ caninput_sel0b = "This Enables External CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 0 "
1740+ caninput_sel1b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 1 "
1741+ caninput_sel2b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 2 "
1742+ caninput_sel3b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 3 "
1743+ caninput_sel4b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 4 "
1744+ caninput_sel5b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 5 "
1745+ caninput_sel6b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 6 "
1746+ caninput_sel7b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 7 "
1747+ caninput_sel8b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 8 "
1748+ caninput_sel9b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 9 "
1749+ caninput_sel10b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 10 "
1750+ caninput_sel11b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 11 "
1751+ caninput_sel12b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 12 "
1752+ caninput_sel13b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 13 "
1753+ caninput_sel14b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 14 "
1754+ caninput_sel15b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 15 "
1755+
1756+ caninput_source_can_address0 = "The source 11bit CAN address of the data for channel 0"
1757+ caninput_source_can_address1 = "The source 11bit CAN address of the data for channel 1"
1758+ caninput_source_can_address2 = "The source 11bit CAN address of the data for channel 2"
1759+ caninput_source_can_address3 = "The source 11bit CAN address of the data for channel 3"
1760+ caninput_source_can_address4 = "The source 11bit CAN address of the data for channel 4"
1761+ caninput_source_can_address5 = "The source 11bit CAN address of the data for channel 5"
1762+ caninput_source_can_address6 = "The source 11bit CAN address of the data for channel 6"
1763+ caninput_source_can_address7 = "The source 11bit CAN address of the data for channel 7"
1764+ caninput_source_can_address8 = "The source 11bit CAN address of the data for channel 8 "
1765+ caninput_source_can_address9 = "The source 11bit CAN address of the data for channel 9"
1766+ caninput_source_can_address10 = "The source 11bit CAN address of the data for channel 10"
1767+ caninput_source_can_address11 = "The source 11bit CAN address of the data for channel 11"
1768+ caninput_source_can_address12 = "The source 11bit CAN address of the data for channel 12"
1769+ caninput_source_can_address13 = "The source 11bit CAN address of the data for channel 13"
1770+ caninput_source_can_address14 = "The source 11bit CAN address of the data for channel 14"
1771+ caninput_source_can_address15 = "The source 11bit CAN address of the data for channel 15"
1772+ caninput_source_start_byte0 = "The Starting byte the data begins at for channel 0"
1773+ caninput_source_start_byte1 = "The Starting byte the data begins at for channel 1"
1774+ caninput_source_start_byte2 = "The Starting byte the data begins at for channel 2"
1775+ caninput_source_start_byte3 = "The Starting byte the data begins at for channel 3"
1776+ caninput_source_start_byte4 = "The Starting byte the data begins at for channel 4"
1777+ caninput_source_start_byte5 = "The Starting byte the data begins at for channel 5"
1778+ caninput_source_start_byte6 = "The Starting byte the data begins at for channel 6"
1779+ caninput_source_start_byte7 = "The Starting byte the data begins at for channel 7"
1780+ caninput_source_start_byte8 = "The Starting byte the data begins at for channel 8"
1781+ caninput_source_start_byte9 = "The Starting byte the data begins at for channel 9"
1782+ caninput_source_start_byte10 = "The Starting byte the data begins at for channel 10"
1783+ caninput_source_start_byte11 = "The Starting byte the data begins at for channel 11"
1784+ caninput_source_start_byte12 = "The Starting byte the data begins at for channel 12"
1785+ caninput_source_start_byte13 = "The Starting byte the data begins at for channel 13"
1786+ caninput_source_start_byte14 = "The Starting byte the data begins at for channel 14"
1787+ caninput_source_start_byte15 = "The Starting byte the data begins at for channel 15"
1788+ caninput_source_num_bytes0 = "The number of bytes the data is made from starting at selected start byte number"
1789+ caninput_source_num_bytes1 = "The number of bytes the data is made from starting at selected start byte number"
1790+ caninput_source_num_bytes2 = "The number of bytes the data is made from starting at selected start byte number"
1791+ caninput_source_num_bytes3 = "The number of bytes the data is made from starting at selected start byte number"
1792+ caninput_source_num_bytes4 = "The number of bytes the data is made from starting at selected start byte number"
1793+ caninput_source_num_bytes5 = "The number of bytes the data is made from starting at selected start byte number"
1794+ caninput_source_num_bytes6 = "The number of bytes the data is made from starting at selected start byte number"
1795+ caninput_source_num_bytes7 = "The number of bytes the data is made from starting at selected start byte number"
1796+ caninput_source_num_bytes8 = "The number of bytes the data is made from starting at selected start byte number"
1797+ caninput_source_num_bytes9 = "The number of bytes the data is made from starting at selected start byte number"
1798+ caninput_source_num_bytes10 = "The number of bytes the data is made from starting at selected start byte number"
1799+ caninput_source_num_bytes11 = "The number of bytes the data is made from starting at selected start byte number"
1800+ caninput_source_num_bytes12 = "The number of bytes the data is made from starting at selected start byte number"
1801+ caninput_source_num_bytes13 = "The number of bytes the data is made from starting at selected start byte number"
1802+ caninput_source_num_bytes14 = "The number of bytes the data is made from starting at selected start byte number"
1803+ caninput_source_num_bytes15 = "The number of bytes the data is made from starting at selected start byte number"
1804+
1805+ cmdEnableTestMode = "Click this to enable test mode. This will not be available if the engine is running"
1806+ cmdStopTestMode = "Click this to disable test mode"
1807+;[PJSC v1.01] cmdtestinj150dc = "this will cycle the output at 50% Duty cycle"
1808+;[PJSC v1.01] cmdtestinj250dc = "this will cycle the output at 50% Duty cycle"
1809+;[PJSC v1.01] cmdtestinj350dc = "this will cycle the output at 50% Duty cycle"
1810+;[PJSC v1.01] cmdtestinj450dc = "this will cycle the output at 50% Duty cycle"
1811+ cmdtestinj150dc = "this will outputs the PWM signal with inputed duty ratio." ;[PJSC v1.01]
1812+ cmdtestinj250dc = "this will outputs the PWM signal with inputed duty ratio." ; |
1813+ cmdtestinj350dc = "this will outputs the PWM signal with inputed duty ratio." ; V
1814+ cmdtestinj450dc = "this will outputs the PWM signal with inputed duty ratio." ;[PJSC v1.01]
1815+ cmdtestspk150dc = "this will cycle the output at 50% Duty cycle"
1816+ cmdtestspk250dc = "this will cycle the output at 50% Duty cycle"
1817+ cmdtestspk350dc = "this will cycle the output at 50% Duty cycle"
1818+ cmdtestspk450dc = "this will cycle the output at 50% Duty cycle"
1819+
1820+ ADCFILTER_TPS = "Recommended value: 50"
1821+ ADCFILTER_CLT = "Recommended value: 180"
1822+ ADCFILTER_IAT = "Recommended value: 180"
1823+ ADCFILTER_O2 = "Recommended value: 128"
1824+ ADCFILTER_BAT = "Recommended value: 128"
1825+ ADCFILTER_MAP = "This setting is only available when using the Instantaneious MAP sampling method. Recommended value: 20"
1826+ ADCFILTER_BARO = "This setting is only available when using an external Baro sensor. Recommended value: 64"
1827+
1828+ boostIntv = "The closed loop control interval will run every this many ms. Generally values between 50% and 100% of the valve frequency work best"
1829+ VVTasOnOff = "Whether or not the VVT table should be treated as on and off control only. If you are using the VVT map to control a switch, this should be Yes. If you are using the VVT control to drive a PWM signal, this should be No"
1830+
1831+ 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"
1832+ 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"
1833+#if resetcontrol_adv
1834+ 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."
1835+#else
1836+ 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."
1837+#endif
1838+ resetControlPin = "The Arduino pin used to control resets."
1839+
1840+[UserDefined]
1841+
1842+; Enhanced TunerStudio dialogs can be defined here
1843+; MegaTune will over look this section
1844+; These dialogs will over-ride those in the UserDefined Section
1845+; User defined ar loaded first, then if one by the same name is defiend here,
1846+; it will replace the MegaTune definition
1847+
1848+; dialog = name, Title, Layout
1849+;
1850+; valid options for layout are xAxis, yAxis, border
1851+; for an xAxis, each field added will be added from right to left
1852+; A yAxis layout will add fields from top to bottom
1853+; A border layout will expect an additional constraint to determine placement
1854+; valid border constraints are north, South, East, West, Center
1855+; all 5 do not need to be filled.
1856+
1857+; The field name can be either a constant reference, or a reference to another
1858+; dialog which will be added.
1859+; dialogs can be nested and can be mixed with fields
1860+
1861+ dialog = engine_constants_southwest, "Speeduino Board"
1862+ field = "Stoichiometric ratio", stoich
1863+ field = "Injector Layout", injLayout, { nCylinders <= 4 }
1864+ field = "Board Layout", pinLayout
1865+ field = "MAP Sample method", mapSample
1866+
1867+ dialog = engine_constants_west, ""
1868+ panel = std_injection, North
1869+ panel = engine_constants_southwest
1870+
1871+ dialog = engine_constants_northeast, "Oddfire Angles"
1872+ field = "Channel 2 angle", oddfire2, { engineType == 1 }
1873+ field = "Channel 3 angle", oddfire3, { engineType == 1 && nCylinders >= 3 }
1874+ field = "Channel 4 angle", oddfire4, { engineType == 1 && nCylinders >= 4 }
1875+
1876+ dialog = engine_constants_east, ""
1877+ panel = engine_constants_northeast, North
1878+ field = ""
1879+#if table4_spark ;[PJSC v1.01] For debug
1880+ field = "Table 4 used for", table4Usage ;[PJSC v1.01] For debug
1881+#endif ;[PJSC v1.01] For debug
1882+
1883+ dialog = engine_constants, "", border
1884+ panel = engine_constants_west, West
1885+ panel = engine_constants_east, East
1886+
1887+ dialog = muxWarningMessage, "" ;[PJSC v1.01]
1888+ field = "Don't select the same function for MUX out1 and MUX out2!" ; |
1889+ ; |
1890+ dialog = muxoutSetting, "MUX Output Port Setting" ; |
1891+ field = "MUX out1", muxout1selection ; |
1892+ field = "MUX out2", muxout2selection ; |
1893+ field = "MUX out3", muxout3selection, { pinLayout == 64 } ; |
1894+ field = "MUX out4", muxout4selection, { pinLayout == 64 } ; V
1895+ panel = muxWarningMessage, ;[PJSC v1.01]
1896+
1897+ dialog = captExValveSetting, "Capture Exhaust Valve Position Control" ;[PJSC]
1898+ field = "Exhaust valve calibration mode", exValveCalibrationMode ; |
1899+ field = "Closed exhaust valve ADC count", exValvePosMin ; |
1900+ field = "Open exhaust valve ADC count", exValvePosMax ; |
1901+ ; |
1902+ dialog = captSparkSetting, "Capture External Spark Control" ; |
1903+ field = "Spark capture trigger edge", externalTrigEdge ; |
1904+ field = "Spark capture hysteresis", exTrigHysteresis ; |
1905+ ; |
1906+ dialog = captDutyPulseSetting, "Capture Duty Pulse Control" ; |
1907+ field = "Duty pulse ON Level ch1", dutyPulseOnLevel ; V
1908+ field = "Duty pulse ON Level ch2", dutyPulseOnLevel2 ;[PJSC]
1909+
1910+ dialog = analogInputPort1select, "" ;[PJSC v1.01]
1911+ field = "", exValveCaptureEnabled ; |
1912+ ; |
1913+ dialog = digitalInputPort1select, "" ; |
1914+ field = "", exTrigModeSelect ; |
1915+ ; |
1916+ dialog = digitalInputPort2select, "" ; |
1917+ field = "", dutyPulseCaptureEnabled ; |
1918+ ; |
1919+ dialog = digitalInputPort3select, "" ; |
1920+ field = "", dutyPulseCaptureEnabled2 ; |
1921+ ; |
1922+ dialog = captDutyPulseSettingCh1, "Capture Duty Pulse Control" ; |
1923+ field = "Duty pulse ON Level ch1", dutyPulseOnLevel ; |
1924+ ; |
1925+ dialog = captDutyPulseSettingCh2, "Capture Duty Pulse Control" ; |
1926+ field = "Duty pulse ON Level ch2", dutyPulseOnLevel2 ; |
1927+ ; |
1928+ dialog = analogInputPort1_controls, "Analog Input Port1", border ; |
1929+ panel = analogInputPort1select, West ; |
1930+ field = "" ; |
1931+ panel = captExValveSetting, East, { exValveCaptureEnabled == 1 } ; |
1932+ ; |
1933+ dialog = analogInputPort1_r, "Reference ADC Gauges" ; |
1934+ gauge = exValveADCGauge ; |
1935+ ; |
1936+ dialog = analogInputPort1,"Analog Input Port1", xAxis ; |
1937+ panel = analogInputPort1_controls ; |
1938+ panel = analogInputPort1_r ; |
1939+ ; |
1940+ dialog = digitalInputPort1, "Digital Input Port1", border ; |
1941+ panel = digitalInputPort1select, West ; |
1942+ field = "" ; |
1943+ panel = captSparkSetting, East, { exTrigModeSelect == 1 } ; |
1944+ ; |
1945+ dialog = digitalInputPort2, "Digital Input Port2", border ; |
1946+ panel = digitalInputPort2select, West ; |
1947+ field = "" ; |
1948+ panel = captDutyPulseSettingCh1, East, { dutyPulseCaptureEnabled == 1 } ; |
1949+ ; |
1950+ dialog = digitalInputPort3, "Digital Input Port3", border ; |
1951+ panel = digitalInputPort3select, West ; |
1952+ field = "" ; |
1953+ panel = captDutyPulseSettingCh2, East, { dutyPulseCaptureEnabled2 == 1 } ; |
1954+ ; |
1955+ dialog = inputPortSetting, "Input Port Setting", yAxis ; |
1956+ panel = analogInputPort1 ; V
1957+ panel = digitalInputPort1 ;[PJSC v1.01]
1958+;[PJSCv1.01] panel = digitalInputPort2 ;[PJSC v1.01]
1959+;[PJSCv1.01] panel = digitalInputPort3 ;[PJSC v1.01]
1960+
1961+; Flex fuel stuff
1962+ dialog = flexFuelSettings, "", yAxis
1963+ field = "Flex Fuel Sensor ", flexEnabled
1964+ field = "Low (E0) ", flexFreqLow, { flexEnabled }
1965+ field = "High (E100) ", flexFreqHigh, { flexEnabled }
1966+
1967+ dialog = flexFuelWest, ""
1968+ panel = flex_fuel_curve, { flexEnabled }
1969+ panel = flex_adv_curve, { flexEnabled }
1970+
1971+ dialog = flexFuelEast, ""
1972+ panel = flex_boost_curve, { flexEnabled && boostEnabled }
1973+
1974+ ;dialog = flexCurves, "", indexCard
1975+ dialog = flexCurves, "", xAxis
1976+ panel = flexFuelWest, West
1977+ panel = flexFuelEast, East
1978+
1979+ dialog = flexFueling, "Fuel Sensor Settings", border
1980+ topicHelp = "http://speeduino.com/wiki/index.php/Flex_Fuel"
1981+ ;panel = flexFuelWest, West
1982+ panel = flexFuelSettings, North
1983+ panel = flexCurves, South
1984+
1985+; Knock control settings
1986+ dialog = knock_windows, "Knock Windows", xAxis
1987+ panel = knock_window_angle_curve, West, { knock_mode }
1988+ panel = knock_window_duration_curve, East, { knock_mode }
1989+
1990+ dialog = knock_settings_west, "Settings", yAxis
1991+ field = "Knock Mode", knock_mode
1992+ field = "Knock Pin", knock_pin, { knock_mode }
1993+ field = "Knock active when pin is", knock_trigger, { knock_mode == 1 }
1994+ field = "Use pullup", knock_pullup, { knock_mode == 1 }
1995+
1996+ dialog = knock_settings_east, "Detection and Response"
1997+ field = "#Detection"
1998+ field = "Knock count required", knock_count, { knock_mode == 1}
1999+ field = "Knock threshold required", knock_threshold, { knock_mode == 2}
2000+ field = "Maximum MAP", knock_maxMAP, { knock_mode }
2001+ field = "Maximum RPM", knock_maxRPM, { knock_mode }
2002+
2003+ ;Retard and recovery
2004+ field = "#Retard"
2005+ field = "Total retard", knock_maxRetard, { knock_mode }
2006+ field = "First step size", knock_firstStep, { knock_mode }
2007+ field = "Other step size", knock_stepSize, { knock_mode }
2008+ field = "Step time", knock_stepTime, { knock_mode }
2009+
2010+ field = "#Recovery"
2011+ field = "Retard duration", knock_duration, { knock_mode } ;Time before retard starts ending
2012+ field = "Recovery step time", knock_recoveryStepTime, { knock_mode } ;Time between each recovery step
2013+ field = "Recovery step size", knock_recoveryStep, { knock_mode }
2014+
2015+ dialog = knock_settings_top, "", xAxis
2016+ panel = knock_settings_west, West
2017+ panel = knock_settings_east, East
2018+
2019+ dialog = knockSettings, "", border
2020+ topicHelp = "http://speeduino.com/wiki/index.php/Knock"
2021+ panel = knock_settings_top, North
2022+ panel = knock_windows, South
2023+
2024+
2025+
2026+ dialog = tacho, "Tacho"
2027+ field = "Output pin", tachoPin
2028+ field = "Output speed", tachoDiv
2029+
2030+ dialog = accelEnrichments_center, ""
2031+ field = "TPSdot Threshold", tpsThresh
2032+ field = "Accel Time", taeTime
2033+ field = "Taper Start RPM", taeTaperMin
2034+ field = "Taper End RPM", taeTaperMax
2035+
2036+ dialog = accelEnrichments_south, "Decelleration Fuel Cutoff (DFCO)"
2037+ field = "Enabled", dfcoEnabled
2038+ field = "TPS Threshold", dfcoTPSThresh, { dfcoEnabled }
2039+ field = "Cutoff RPM", dfcoRPM, { dfcoEnabled }
2040+ field = "RPM Hysteresis", dfcoHyster, { dfcoEnabled }
2041+
2042+ dialog = accelEnrichments_north_south, ""
2043+ liveGraph = pump_ae_Graph, "AE Graph"
2044+ graphLine = afr
2045+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
2046+
2047+ dialog = accelEnrichments_north, "", xAxis
2048+ panel = time_accel_tpsdot_curve
2049+
2050+ dialog = accelEnrichments, "Acceleration Enrichment"
2051+ topicHelp = "http://speeduino.com/wiki/index.php/Acceleration_Wizard"
2052+ panel = accelEnrichments_north, North
2053+ panel = accelEnrichments_north_south, Center
2054+ panel = accelEnrichments_center, Center
2055+ panel = accelEnrichments_south, South
2056+
2057+ dialog = veCorrectionSetting, "VE correction setting" ;[PJSC v1.01]
2058+ field = "Multiply VE value by MAP:Baro ratio", multiplyMAP ; |
2059+ field = "Multiply by ratio of AFR to Target AFR", includeAFR, { egoType == 2 } ; V
2060+ field = "Barometric correction", baroCorr, { useExtBaro } ;[PJSC v1.01]
2061+
2062+ dialog = veMapSelectionSet1Pri, "Primary Table" ;[PJSC v1.01]
2063+ field = "Injector 1", veMapSelection1Pri ; |
2064+ field = "Injector 2", veMapSelection2Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2065+ field = "Injector 3", veMapSelection3Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2066+ field = "Injector 4", veMapSelection4Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2067+ ; |
2068+ dialog = veMapSelectionSet1Sec, "Secondary Table" ; |
2069+ field = "", veMapSelection1Sec, { multiVEmapEnabled && dualFuelEnabled } ; |
2070+ field = "", veMapSelection2Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2071+ field = "", veMapSelection3Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2072+ field = "", veMapSelection4Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2073+ ; |
2074+ dialog = veMapSelectionSet1, "VE Table selection1 - SW OFF", xAxis ; |
2075+ panel = veMapSelectionSet1Pri ; |
2076+ panel = veMapSelectionSet1Sec, { multiVEmapEnabled && dualFuelEnabled } ; |
2077+ ; |
2078+ dialog = veMapSelectionSet2Pri, "Primary Table" ; |
2079+ field = "Injector 1", veMapSelection1_2Pri, { multiVEmapEnabled } ; |
2080+ field = "Injector 2", veMapSelection2_2Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2081+ field = "Injector 3", veMapSelection3_2Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2082+ field = "Injector 4", veMapSelection4_2Pri, { multiVEmapEnabled && mapSeparationEnabled } ; |
2083+ ; |
2084+ dialog = veMapSelectionSet2Sec, "Secondary Table" ; |
2085+ field = "", veMapSelection1_2Sec, { multiVEmapEnabled && dualFuelEnabled } ; |
2086+ field = "", veMapSelection2_2Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2087+ field = "", veMapSelection3_2Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2088+ field = "", veMapSelection4_2Sec, { multiVEmapEnabled && mapSeparationEnabled && dualFuelEnabled } ; |
2089+ ; |
2090+ dialog = veMapSelectionSet2, "VE Table selection2 - SW ON", xAxis ; |
2091+ panel = veMapSelectionSet2Pri ; |
2092+ panel = veMapSelectionSet2Sec, { multiVEmapEnabled && dualFuelEnabled } ; |
2093+ ; |
2094+ dialog = veMapSelectionDialog, "" ; |
2095+ panel = veMapSelectionSet1 ; |
2096+ panel = veMapSelectionSet2, { mapSwitchingEnabled } ; |
2097+ ; |
2098+ dialog = veMapSelectOption, "VE Table select settings" ; |
2099+ field = "Multi VE Table", multiVEmapEnabled ; |
2100+ field = "VE Table Separation", mapSeparationEnabled ; |
2101+ field = "VE Table Switching", mapSwitchingEnabled ; |
2102+ field = "Dual Fuel Load", dualFuelEnabled ; |
2103+ field = "Dual Fuel Load Algorithm", secondaryFuelUsage, { dualFuelEnabled } ; |
2104+ ; |
2105+ dialog = veFuelLoadSelection, "Fuel Load Selection" ; |
2106+ field = "VE Table 1 Fuel Load", algorithm ; |
2107+ field = "VE Table 2 Fuel Load", algorithm2, { multiVEmapEnabled } ; |
2108+ field = "VE Table 3 Fuel Load", algorithm3, { multiVEmapEnabled } ; |
2109+#if table4_fuel ; |
2110+ field = "VE Table 4 Fuel Load", ignAlgorithm, { multiVEmapEnabled } ; |
2111+#endif ; |
2112+ ; |
2113+ dialog = veMapSelectConfig, "", xAxis ; |
2114+ panel = veMapSelectOption ; |
2115+ panel = veFuelLoadSelection ; |
2116+ ; |
2117+ dialog = veMapSelectDialog, "VE Table configration" ; |
2118+ panel = veCorrectionSetting ; |
2119+ panel = veMapSelectConfig ; V
2120+ panel = veMapSelectionDialog ;[PJSC v1.01]
2121+
2122+;[PJSC] dialog = veTableDialog_north, ""
2123+;[PJSC] panel = veTable1Tbl
2124+
2125+;[PJSC] dialog = veTableDialog, "VE Table"
2126+;[PJSC] panel = veTableDialog_north, North
2127+;[PJSC] panel = veTableDialog_south, South
2128+ dialog = veTable1Dialog, "VE Table 1" ;[PJSC v1.01]
2129+ panel = veTable1Tbl ; |
2130+ ; |
2131+ dialog = veTable2Dialog, "VE Table 2" ; |
2132+ panel = veTable2Tbl ; |
2133+ ; |
2134+ dialog = veTable3Dialog, "VE Table 3" ; |
2135+ panel = veTable3Tbl ; |
2136+ ; |
2137+ dialog = veTable4Dialog, "VE Table 4" ; V
2138+ panel = sparkTbl ;[PJSC v1.01]
2139+
2140+ dialog = injCloseAngles_west, "" ;[PJSC v1.01]
2141+ field = "Channel 1", inj1SquirtStartEnd, { squirtDeviceType == 0 } ; |
2142+ field = "Channel 2", inj2SquirtStartEnd, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; |
2143+ field = "Channel 3", inj3SquirtStartEnd, { indInjAng && (nCylinders > 4 || nCylinders == 3 || nInjectors > 2 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; V
2144+ field = "Channel 4", inj4SquirtStartEnd, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01]
2145+
2146+ dialog = injCloseAngles_east, "" ;[PJSC v1.01]
2147+ field = "", inj1Ang, { squirtDeviceType == 0 } ; |
2148+ field = "", inj2Ang, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; |
2149+ field = "", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || nInjectors > 2 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; V
2150+ field = "", inj4Ang, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01]
2151+
2152+ dialog = injCloseAngles, "Injector squirt angle", xAxis ;[PJSC v1.01]
2153+ panel = injCloseAngles_west ; V
2154+ panel = injCloseAngles_east ;[PJSC v1.01]
2155+
2156+ dialog = injChars, "Injector Characteristics" ;[PJSC v1.01]
2157+ field = "Squirt Device", squirtDeviceType ; |
2158+ field = "PJSC solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ; |
2159+ field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ; |
2160+ field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ; |
2161+ field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ; |
2162+ panel = injCloseAngles ; V
2163+ panel = injector_voltage_curve ;[PJSC v1.01]
2164+
2165+;[PJSC v1.01] dialog = injChars, "Injector Characteristics" ;[PJSC]
2166+;[PJSC v1.01] field = "Squirt Device", squirtDeviceType ; |
2167+;[PJSC v1.01] field = "PJSC solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ; |
2168+;[PJSC v1.01] field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ; |
2169+;[PJSC v1.01] field = "Injector close angle", { squirtDeviceType == 0 } ; |
2170+;[PJSC v1.01] field = "", inj1Ang, { indInjAng == 0 && squirtDeviceType == 0 } ; |
2171+;[PJSC v1.01] field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ; |
2172+;[PJSC v1.01] field = "Channel 1", inj1Ang, { indInjAng && squirtDeviceType == 0 } ; |
2173+;[PJSC v1.01] field = "Channel 2", inj2Ang, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; |[PJSC v1.01]
2174+;[PJSC v1.01] field = "Channel 3", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || nInjectors > 2 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; |[PJSC v1.01]
2175+;[PJSC v1.01] field = "Channel 4", inj4Ang, { indInjAng && (nCylinders > 6 || ((nCylinders == 4 || nInjectors > 3) && (injLayout == 3))) && squirtDeviceType == 0 } ; |[PJSC v1.01]
2176+;[PJSC v1.01] field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ; V
2177+;[PJSC v1.01] panel = injector_voltage_curve ;[PJSC]
2178+
2179+;[PJSC] dialog = injChars, "Injector Characteristics"
2180+;[PJSC] field = "Injector Open Time", injOpen
2181+;[PJSC] field = "Injector close angle"
2182+;[PJSC] field = "", inj1Ang, { indInjAng == 0 }
2183+;[PJSC] field = "Individual channel setting", indInjAng
2184+;[PJSC] field = "Channel 1", inj1Ang, { indInjAng }
2185+;[PJSC] field = "Channel 2", inj2Ang, { nCylinders > 1 && indInjAng }
2186+;[PJSC] field = "Channel 3", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || ((nCylinders == 4) && (injLayout == 3))) }
2187+;[PJSC] field = "Channel 4", inj4Ang, { indInjAng && (nCylinders > 6 || ((nCylinders == 4) && (injLayout == 3))) }
2188+;[PJSC] field = "Injector Duty Limit", dutyLim
2189+;[PJSC] panel = injector_voltage_curve
2190+
2191+ dialog = egoControl, ""
2192+ topicHelp = "http://speeduino.com/wiki/index.php/AFR/O2"
2193+ field = "Sensor Type", egoType
2194+ field = "Algorithm", egoAlgorithm, { egoType }
2195+ field = "Ignition Events per Step", egoCount, { egoType && (egoAlgorithm < 3) }
2196+ field = "Controller Auth +/-", egoLimit, { egoType && (egoAlgorithm < 3) }
2197+ field = "Only correct above:", ego_min, { egoType && (egoAlgorithm < 3) }
2198+ field = "and correct below:", ego_max, { egoType && (egoAlgorithm < 3) }
2199+
2200+ field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
2201+ field = "Active Above RPM", egoRPM, { egoType && (egoAlgorithm < 3) }
2202+ field = "Active Below TPS", egoTPSMax, { egoType && (egoAlgorithm < 3) }
2203+ field = "EGO delay after start", ego_sdelay, { (egoAlgorithm < 3) }
2204+ field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
2205+ field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
2206+ field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
2207+
2208+ dialog = fanSettings,"Fan Settings",7
2209+ field = "Fan Mode", fanEnable
2210+ field = "Fan when off", fanWhenOff, { fanEnable }
2211+ field = "Fan output pin", fanPin, { fanEnable }
2212+ field = "Fan Output Inverted", fanInv , { fanEnable }
2213+ field = "Fan temperature SP", fanSP, { fanEnable }
2214+ field = "Fan hysteresis", fanHyster, { fanEnable }
2215+
2216+ dialog = stepper_idle, "Stepper Idle"
2217+ field = "Step time (ms)", iacStepTime, { iacAlgorithm == 4 || iacAlgorithm == 5 }
2218+ field = "Home steps", iacStepHome, { iacAlgorithm == 4 || iacAlgorithm == 5 }
2219+ field = "Minimum Steps", iacStepHyster, { iacAlgorithm == 4 || iacAlgorithm == 5 }
2220+ field = "Stepper Inverted", iacStepperInv, { iacAlgorithm == 4 || iacAlgorithm == 5 }
2221+
2222+ dialog = pwm_idle, "PWM Idle"
2223+;[PJSC v1.01] field = "Number of outputs", iacChannels, { iacAlgorithm == 2 || iacAlgorithm == 3 }
2224+ field = "Idle valve frequency", idleFreq, { iacAlgorithm == 2 || iacAlgorithm == 3 }
2225+ field = "Idle valve direction", iacPWMdir, { iacAlgorithm == 2 || iacAlgorithm == 3 }
2226+
2227+ dialog = closedloop_idle, "Closed loop Idle"
2228+ field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 }
2229+ field = "I", idleKI, { iacAlgorithm == 3 || iacAlgorithm == 5 }
2230+ field = "D", idleKD, { iacAlgorithm == 3 || iacAlgorithm == 5 }
2231+ field = "Minimum valve duty", iacCLminDuty, { iacAlgorithm == 3 }
2232+ field = "Maximum valve duty", iacCLmaxDuty, { iacAlgorithm == 3 }
2233+
2234+ dialog = idleSettings, "Idle Settings"
2235+ topicHelp = "http://speeduino.com/wiki/index.php/Idle"
2236+ field = "Idle control type", iacAlgorithm
2237+ field = "#Fast Idle"
2238+ field = "Fast idle temp", iacFastTemp, { iacAlgorithm == 1 }
2239+ panel = pwm_idle
2240+;[PJSC] panel = stepper_idle
2241+ panel = closedloop_idle
2242+
2243+ dialog = idleUpSettings, "Idle Up Settings"
2244+ field = "Idle Up Enabled", idleUpEnabled
2245+ field = "Idle Up Pin", idleUpPin, { idleUpEnabled }
2246+ field = "Idle Up Pin Polarity", idleUpPolarity, { idleUpEnabled }
2247+ field = "Idle Up Amount", idleUpAdder, { idleUpEnabled }
2248+
2249+ dialog = fuelpump, "Fuel pump"
2250+ field = "Fuel pump pin", fuelPumpPin
2251+ field = "Fuel pump prime duration", fpPrime
2252+
2253+ dialog = crankingEnrichDialog, "Cranking Enrichment", yAxis
2254+ panel = cranking_enrich_curve
2255+ field = "#Note"
2256+ field = "Values are specified as modifiers to the normal fueling. Eg 100% = No change."
2257+
2258+ dialog = crankingIgnOptions, "Cranking Timing", yAxis
2259+ field = "Cranking advance Angle", CrankAng, { ignCranklock == 0 }
2260+ field = "Cranking bypass", ignBypassEnable
2261+ field = "Bypass output pin", ignBypassPin { ignBypassEnable }
2262+ field = "Fix cranking timing with trigger", ignCranklock, { TrigPattern == 1 || TrigPattern == 4 || TrigPattern == 10 || TrigPattern == 9 }
2263+
2264+ dialog = crankingOptions, "", yAxis
2265+ field = "Cranking RPM (Max)", crankRPM
2266+ field = "Flood Clear level", tpsflood
2267+ field = ""
2268+ field = "Fuel pump prime duration", fpPrime
2269+ field = "Priming Pulsewidth", primePulse
2270+
2271+ dialog = crankPW, "Cranking Settings", yAxis
2272+ topicHelp = "http://speeduino.com/wiki/index.php/Cranking"
2273+ panel = crankingOptions, North
2274+ panel = crankingEnrichDialog, Center
2275+ panel = crankingIgnOptions, South
2276+
2277+
2278+ dialog = aseSettings, "Afterstart Enrichment"
2279+ field = "Enrichment %", asePct
2280+ field = "Number of Sec to run", aseCount
2281+
2282+
2283+ dialog = triggerSettings,"Trigger Settings",4
2284+ topicHelp = "http://speeduino.com/wiki/index.php/Decoders"
2285+ field = "Trigger Pattern", TrigPattern
2286+ field = "Primary base teeth", numTeeth, { TrigPattern == 0 || TrigPattern == 2 || TrigPattern == 11 }
2287+ field = "Primary trigger speed", TrigSpeed, { TrigPattern == 0 }
2288+ field = "Missing teeth", missingTeeth, { TrigPattern == 0 }
2289+ field = "Trigger angle multiplier", TrigAngMul, { TrigPattern == 11 }
2290+ field = "Trigger Angle ", TrigAng
2291+ field = "This number represents the angle ATDC when "
2292+ field = "tooth #1 passes the primary sensor."
2293+ field = ""
2294+ field = "Skip Revolutions", SkipCycles
2295+ field = "Note: This is the number of revolutions that will be skipped during"
2296+ field = "cranking before the injectors and coils are fired"
2297+ field = "Trigger edge", TrigEdge { TrigPattern != 4 } ;4G63 uses both edges
2298+ field = "Secondary trigger edge", TrigEdgeSec, { (TrigPattern == 0 && TrigSpeed == 0) || TrigPattern == 2 || TrigPattern == 9 || TrigPattern == 12 } ;Missing tooth, dual wheel and Miata 9905
2299+ field = "Missing Tooth Secondary type" trigPatternSec, { (TrigPattern == 0&& TrigSpeed == 0) }
2300+ field = "Trigger Filter", TrigFilter, { TrigPattern != 13 }
2301+ field = "Re-sync every cycle", useResync, { TrigPattern == 2 || TrigPattern == 4 || TrigPattern == 7 || TrigPattern == 12 || TrigPattern == 9 || TrigPattern == 13 } ;Dual wheel, 4G63, Audi 135, Nissan 360, Miata 99-05
2302+
2303+#if table4_spark ;[PJSC v1.01] For switching table4
2304+ dialog = sparkSettings,"Spark Settings",4
2305+ field = "Ignition load source", ignAlgorithm
2306+ field = "Spark output mode", sparkMode
2307+ field = "Cranking advance Angle", CrankAng
2308+ field = "Spark Outputs triggers", IgInv
2309+ field = ""
2310+ field = "Enabled Fixed/Locked timing", fixAngEnable
2311+ field = "Fixed Angle", FixAng, { fixAngEnable }
2312+ field = "#Note: During cranking the fixed/locked timing angle is overriden by the Cranking advance angle value above"
2313+ field = ""
2314+ field = "#The below option is currently in testing! If unsure what this is, please set to No"
2315+ field = "Use new ignition mode", perToothIgn, {TrigPattern == 0 || TrigPattern == 1 || TrigPattern == 2 || TrigPattern == 4 || TrigPattern == 12 || TrigPattern == 13 } ;Only works for missing tooth, distributor, dual wheel, 4g63, nissan 360, Subaru 6/7
2316+
2317+ dialog = dwellSettings, "Dwell Settings", 4
2318+ topicHelp = "http://speeduino.com/wiki/index.php/Dwell"
2319+ field = " Cranking dwell", dwellcrank
2320+ field = " Running dwell", dwellrun
2321+ field = " Spark duration", sparkDur
2322+ field = ""
2323+ field = "#Note"
2324+ field = "The above times are for 12V. Voltage correction"
2325+ field = "is applied. At higher voltages the time is reduced"
2326+ field = "and when low it is increased"
2327+ field = ""
2328+ field = "Overdwell protection"
2329+ field = "Use Overdwell protection", useDwellLim
2330+ field = "Max dwell time", dwellLim, { useDwellLim }
2331+ field = "Note: Set the maximum dwell time at least 3ms above"
2332+ field = "your desired dwell time (Including cranking)"
2333+
2334+ dialog = rotary_ignition, "Rotary Ignition", 4
2335+ field = "Ignition Configuration", rotaryType
2336+ panel = rotaryTrailing_curve
2337+#endif ;[PJSC v1.01] For switching table4
2338+
2339+ dialog = boostCut, "Boost Cut"
2340+ field = "Boost Cut", boostCutType
2341+ field = "Boost Limit", boostLimit, { boostCutType }
2342+
2343+ dialog = boostLoad, ""
2344+ field = "Mode", boostType
2345+ field = "In open loop mode, the values in this table are duty cycle %"
2346+ field = "In closed loop mode, the values are boost targets in kPa"
2347+ panel = boostTbl
2348+
2349+ dialog = RevLimiterS, "Rev Limiter", 4
2350+ topicHelp = "http://speeduino.com/wiki/index.php/Rev_Limits"
2351+ field = "Rev Limiter"
2352+ field = "Soft rev limit", SoftRevLim
2353+ field = "Soft limit absolute timing", SoftLimRetard
2354+ field = "Soft limit max time", SoftLimMax
2355+ field = "Hard Rev limit", HardRevLim
2356+ field = "Hard limiter method", hardCutType
2357+ panel = boostCut
2358+
2359+ dialog = clutchInput, "Clutch input"
2360+ field = "Clutch Input Pin", launchPin, { launchEnable || flatSEnable }
2361+ field = "Clutch enabled when signal is",launchHiLo, { launchEnable || flatSEnable }
2362+ field = "Clutch Pullup Resistor", lnchPullRes, { launchEnable || flatSEnable }
2363+ field = "Launch / Flat Shift switch RPM",flatSArm, { launchEnable || flatSEnable }
2364+
2365+ dialog = LaunchControl, "Launch Control / Flat shift", 6
2366+ topicHelp = "http://speeduino.com/wiki/index.php/Launch_Flatshift"
2367+ panel = clutchInput
2368+ ; Launch control
2369+ field = "Launch Control"
2370+ field = "Enable Launch", launchEnable
2371+ field = "TPS threshold", lnchCtrlTPS, { launchEnable }
2372+ field = "Soft rev limit", lnchSoftLim, { launchEnable }
2373+ field = "Soft limit absolute timing", lnchRetard, { launchEnable }
2374+ field = "Hard rev limit", lnchHardLim, { launchEnable }
2375+ field = "Fuel adder during launch", lnchFuelAdd, { launchEnable }
2376+
2377+ ; Flat shift
2378+ field = "Flat Shift"
2379+ field = "Enable flat shift", flatSEnable
2380+ field = "Soft rev window", flatSSoftWin, { flatSEnable }
2381+ field = "Soft limit absolute timing", flatSRetard, { flatSEnable }
2382+
2383+ dialog = NitrousStage1, "Stage 1"
2384+ field = "Nitrous Output Pin", n2o_stage1_pin
2385+ field = "Minimum Engage RPM", n2o_stage1_minRPM
2386+ field = "Maximum Engage RPM", n2o_stage1_maxRPM
2387+ field = "Fuel adder @ Min RPM", n2o_stage1_adderMin
2388+ field = "Fuel adder @ Max RPM", n2o_stage1_adderMax
2389+ field = "Ignition retard when active", n2o_stage1_retard
2390+
2391+ dialog = NitrousStage2, "Stage 2"
2392+ field = "Nitrous Output Pin", n2o_stage2_pin
2393+ field = "Minimum Engage RPM", n2o_stage2_minRPM
2394+ field = "Maximum Engage RPM", n2o_stage2_maxRPM
2395+ field = "Fuel adder @ Min RPM", n2o_stage2_adderMin
2396+ field = "Fuel adder @ Max RPM", n2o_stage2_adderMax
2397+ field = "Ignition retard when active", n2o_stage2_retard
2398+
2399+ dialog = NitrousMain, "Settings"
2400+ field = "Nitrous Mode", n2o_enable
2401+ field = "Arming Pin", n2o_arming_pin, { n2o_enable > 0 }
2402+ field = "Nitrous is armed when pin is", n2o_pin_polarity,{ n2o_enable > 0 }
2403+ field = "Minimum CLT", n2o_minCLT, { n2o_enable > 0 }
2404+ field = "Minimum TPS", n2o_minTPS, { n2o_enable > 0 }
2405+ field = "Maximum MAP", n2o_maxMAP, { n2o_enable > 0 }
2406+ field = "Leanest AFR", n2o_maxAFR, { n2o_enable > 0 }
2407+
2408+ dialog = NitrousControl, "Nitrous"
2409+ panel = NitrousMain, North
2410+ panel = NitrousStage1, West, { n2o_enable > 0 }
2411+ panel = NitrousStage2, East, { n2o_enable > 1 }
2412+
2413+
2414+ dialog = OLED, "OLED Display", 2
2415+ field = "Display Type", display
2416+ field = "#Note"
2417+ field = "ECU must be rebooted after changing above value"
2418+ field = "Field 1", display1, { display }
2419+ field = "Field 2", display2, { display }
2420+ field = "Field 3", display3, { display }
2421+ field = "Field 4", display4, { display }
2422+ ;field = "Bar 1", displayB1, { display }
2423+ ;field = "Bar 2", displayB2, { display > 2 }
2424+
2425+ dialog = mapCal, "Calibrate MAP"
2426+ field = "#MAP Sensor"
2427+ settingSelector = "Common Pressure Sensors"
2428+ settingOption = "MPX4115", mapMin=10, mapMax=118 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf
2429+ settingOption = "MPX4250", mapMin=10, mapMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 – 0.04)
2430+ settingOption = "GM 1-BAR", mapMin=10, mapMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2431+ settingOption = "GM 2-BAR", mapMin=9, mapMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2432+ settingOption = "GM 3-BAR", mapMin=1, mapMax=315 ; VOUT = VS*(.00318*P-.00353)
2433+ settingOption = "MPXH6300", mapMin=1, mapMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
2434+ settingOption = "MPX5700", mapMin=-31, mapMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
2435+ settingOption = "MPX6400", mapMin=3, mapMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.00842)
2436+ settingOption = "Denso 079800", mapMin=0, mapMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
2437+ settingOption = "VW/Audi/Porsche 250kPa", mapMin=26, mapMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
2438+ settingOption = "Bosch 3 Bar TMAP", mapMin=-6, mapMax=323
2439+
2440+ field = "kPa At 0.0 Volts", mapMin
2441+ field = "kPa At 5.0 Volts", mapMax
2442+
2443+ field = "#Baro Sensor"
2444+ field = "Use external Baro sensor", useExtBaro
2445+ field = "Analog pin to use for ext. Baro sensor", baroPin, { useExtBaro }
2446+
2447+ settingSelector = "Common Pressure Sensors", { useExtBaro }
2448+ settingOption = "MPX4115", baroMin=10, baroMax=118 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf
2449+ settingOption = "MPX4250", baroMin=10, baroMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 – 0.04)
2450+ settingOption = "GM 1-BAR", baroMin=10, baroMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2451+ settingOption = "GM 2-BAR", baroMin=9, baroMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2452+ settingOption = "GM 3-BAR", baroMin=1, baroMax=315 ; VOUT = VS*(.00318*P-.00353)
2453+ settingOption = "MPXH6300", baroMin=1, baroMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
2454+ settingOption = "MPX5700", baroMin=-31, baroMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
2455+ settingOption = "MPX6400", baroMin=3, baroMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.00842)
2456+ settingOption = "Denso 079800", baroMin=0, baroMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
2457+ settingOption = "VW/Audi/Porsche 250kPa", baroMin=26, baroMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
2458+ settingOption = "Bosch 3 Bar TMAP", mapMin=-6, mapMax=323
2459+
2460+ field = "kPa At 0.0 Volts", baroMin, { useExtBaro }
2461+ field = "kPa At 5.0 Volts", baroMax, { useExtBaro }
2462+
2463+ field = "#EMAP Sensor"
2464+ field = "Use EMAP sensor", useEMAP
2465+ field = "Analog pin to use for ext. Baro sensor", EMAPPin, { useEMAP }
2466+
2467+ settingSelector = "Common Pressure Sensors", { useEMAP }
2468+ settingOption = "MPX4115", EMAPMin=10, EMAPMax=118 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf
2469+ settingOption = "MPX4250", EMAPMin=10, EMAPMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 – 0.04)
2470+ settingOption = "GM 1-BAR", EMAPMin=10, EMAPMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2471+ settingOption = "GM 2-BAR", EMAPMin=9, EMAPMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
2472+ settingOption = "GM 3-BAR", EMAPMin=1, EMAPMax=315 ; VOUT = VS*(.00318*P-.00353)
2473+ settingOption = "MPXH6300", EMAPMin=1, EMAPMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
2474+ settingOption = "MPX5700", EMAPMin=-31, EMAPMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
2475+ settingOption = "MPX6400", EMAPMin=3, EMAPMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP–0.00842)
2476+ settingOption = "Denso 079800", EMAPMin=0, EMAPMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
2477+ settingOption = "VW/Audi/Porsche 250kPa", EMAPMin=26, EMAPMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
2478+
2479+ field = "kPa At 0.0 Volts", EMAPMin, { useEMAP }
2480+ field = "kPa At 5.0 Volts", EMAPMax, { useEMAP }
2481+
2482+ dialog = sensorFilters, "Analog sensor filters"
2483+ field = "The values here set the amount of filtering to apply to each analog input"
2484+ field = "Higher values result in stronger filtering, but slower response times for readings"
2485+ field = "#Most setups will NOT require changes to the default filter values"
2486+ field = ""
2487+ slider = "Throttle Position Sensor", ADCFILTER_TPS, horizontal
2488+ slider = "Coolant Sensor", ADCFILTER_CLT, horizontal
2489+ slider = "Inlet Air Temp sensor", ADCFILTER_IAT, horizontal
2490+ slider = "O2 sensor", ADCFILTER_O2, horizontal
2491+ slider = "Battery voltage", ADCFILTER_BAT, horizontal
2492+ slider = "MAP sensor", ADCFILTER_MAP, horizontal
2493+ slider = "Baro sensor", ADCFILTER_BARO, horizontal, { useExtBaro > 0 }
2494+
2495+ dialog = boostSettings, "Boost Control"
2496+ topicHelp = "http://speeduino.com/wiki/index.php/Boost_Control"
2497+ field = "Boost Control Enabled", boostEnabled
2498+ field = "Boost control type", boostType
2499+ field = "Boost output pin", boostPin, { boostEnabled }
2500+ field = "Boost solenoid freq.", boostFreq, { boostEnabled }
2501+
2502+ field = "Valve minimum duty cycle", boostMinDuty, { boostEnabled && boostType == 1 }
2503+ field = "Valve maximum duty cycle", boostMaxDuty, { boostEnabled && boostType == 1 }
2504+ panel = boostCut
2505+ field = "Closed Loop settings"
2506+ field = "Control mode", boostMode, { boostEnabled && boostType == 1 }
2507+ slider = "Sensitivity", boostSens, horizontal, { boostEnabled && boostType == 1 }
2508+ field = "Control interval", boostIntv, { boostEnabled && boostType == 1 }
2509+ field = "P", boostKP, { boostEnabled && boostMode && boostType == 1 }
2510+ field = "I", boostKI, { boostEnabled && boostMode && boostType == 1 }
2511+ field = "D", boostKD, { boostEnabled && boostMode && boostType == 1 }
2512+
2513+
2514+ dialog = vvtSettings, "VVT Control"
2515+ field = "VVT Control Enabled", vvtEnabled
2516+ field = "Use VVT map as On / Off only", VVTasOnOff, { vvtEnabled }
2517+ field = "VVT output pin", vvtPin, { vvtEnabled }
2518+ field = "VVT solenoid freq.", vvtFreq, { vvtEnabled }
2519+
2520+
2521+ dialog = warmup, "Warmup Enrichment (WUE) - Percent Multiplier"
2522+ panel = warmup_curve
2523+ field = "Final enrichment value must be 100%."
2524+ field = ""
2525+ panel = aseSettings
2526+
2527+ ;Fuel trim composite dialog
2528+ dialog = inj_trim1TblTitle, "Channel #1"
2529+ panel = fuelTrimTable1Tbl, { fuelTrimEnabled }
2530+ dialog = inj_trim2TblTitle, "Channel #2"
2531+ panel = fuelTrimTable2Tbl, { fuelTrimEnabled }
2532+ dialog = inj_trim3TblTitle, "Channel #3"
2533+ panel = fuelTrimTable3Tbl, { fuelTrimEnabled }
2534+ dialog = inj_trim4TblTitle, "Channel #4"
2535+ panel = fuelTrimTable4Tbl, { fuelTrimEnabled }
2536+
2537+ dialog = inj_trimadt, "", xAxis
2538+ panel = inj_trim1TblTitle
2539+ panel = inj_trim2TblTitle
2540+ dialog = inj_trimadb, "", xAxis
2541+ panel = inj_trim3TblTitle
2542+ panel = inj_trim4TblTitle
2543+
2544+ dialog = inj_trim_enable, ""
2545+ field = "Individual fuel trim enabled", fuelTrimEnabled, { injLayout == 3 }
2546+
2547+ dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
2548+ panel = inj_trim_enable, North
2549+ panel = inj_trimadt, Center
2550+ panel = inj_trimadb, South
2551+
2552+ ;;Injector staging
2553+ dialog = stagingTableDialog_north, ""
2554+ field = "Staging enabled", stagingEnabled
2555+ field = "Staging mode", stagingMode
2556+ field = "Size of primary injectors", stagedInjSizePri, { stagingEnabled }
2557+ field = "Size of secondary injectors", stagedInjSizeSec, { stagingEnabled }
2558+
2559+ dialog = stagingTableDialog_south, ""
2560+ panel = stagingTbl, { stagingMode == 0 }
2561+
2562+ dialog = stagingTableDialog, "Staged injection"
2563+ topicHelp = "https://speeduino.com/wiki/index.php/Staged_Injection"
2564+ panel = stagingTableDialog_north, North
2565+ panel = stagingTableDialog_south, South
2566+
2567+ dialog = outputtest_warningmessage, ""
2568+ field = "WARNING! USE AT YOUR OWN RISK. INCORRECT USE WILL DAMAGE YOUR HARDWARE!"
2569+ field = "Do not attempt to use this page whilst your engine is running!"
2570+ field = "Forcing the Injector or Spark outputs could cause flooding of your engine or permanent damage to ignition coils!"
2571+
2572+
2573+ dialog = enableoutputtestbuttons, "Enable Test Controls", xAxis
2574+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
2575+
2576+ ; The rem > 0 expression is just for testing.. It works when the arduino is on the Stim with rpm.
2577+ ; a status bit there would be the expected real expression
2578+ commandButton = "Enable Test Mode", cmdEnableTestMode,{!testenabled & !testactive }
2579+
2580+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
2581+ ; dialog close, but only if the enable condition is true
2582+ ; valid click flags are:
2583+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
2584+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
2585+ ; clickOnClose - the command will be sent on dialog close always
2586+ commandButton = "Stop Test Mode", cmdStopTestMode,{testactive}, clickOnCloseIfEnabled
2587+
2588+ dialog = enablefuelpumpbuttons, "Fuel pump", xAxis ;[PJSC v1.01]
2589+ commandButton = "Fuel Pump On", cmdfpon, { muxout1selection == 4 || muxout2selection == 4 } ;[PJSC v1.01]
2590+ commandButton = "Fuel Pump Off", cmdfpoff, { muxout1selection == 4 || muxout2selection == 4 } ;[PJSC v1.01]
2591+
2592+ dialog = outputtestinj1, "Injector CH1", yAxis
2593+ commandButton = "Off", cmdtestinj1off,{testactive}
2594+;[PJSC v1.01] commandButton = "50% DC", cmdtestinj150dc,{!testenabled & testactive}
2595+ commandButton = "On", cmdtestinj1on,{!testenabled & testactive}
2596+ commandButton = "PWM", cmdtestinj150dc, {!testenabled & testactive} ;[PJSC v1.01]
2597+ field = "PWM freq.", dutyFreqTst1, {!testenabled & testactive} ;[PJSC v1.01]
2598+ field = "Duty ratio", dutyRatioTst1, {!testenabled & testactive} ;[PJSC v1.01]
2599+ dialog = outputtestinj2, "Injector CH2", yAxis
2600+ commandButton = "Off", cmdtestinj2off,{testactive}
2601+;[PJSC v1.01] commandButton = "50% DC", cmdtestinj250dc,{!testenabled &testactive}
2602+ commandButton = "On", cmdtestinj2on,{!testenabled & testactive}
2603+ commandButton = "PWM", cmdtestinj250dc, {!testenabled & testactive} ;[PJSC v1.01]
2604+ field = "PWM freq.", dutyFreqTst2, {!testenabled & testactive} ;[PJSC v1.01]
2605+ field = "Duty ratio", dutyRatioTst2, {!testenabled & testactive} ;[PJSC v1.01]
2606+ dialog = outputtestinj3, "Injector CH3", yAxis
2607+ commandButton = "Off", cmdtestinj3off,{testactive}
2608+;[PJSC v1.01] commandButton = "50% DC", cmdtestinj350dc,{!testenabled & testactive}
2609+ commandButton = "On", cmdtestinj3on,{!testenabled & testactive}
2610+ commandButton = "PWM", cmdtestinj350dc, {!testenabled & testactive} ;[PJSC v1.01]
2611+ field = "PWM freq.", dutyFreqTst3, {!testenabled & testactive} ;[PJSC v1.01]
2612+ field = "Duty ratio", dutyRatioTst3, {!testenabled & testactive} ;[PJSC v1.01]
2613+ dialog = outputtestinj4, "Injector CH4", yAxis
2614+ commandButton = "Off", cmdtestinj4off,{testactive}
2615+;[PJSC v1.01] commandButton = "50% DC", cmdtestinj450dc,{!testenabled & testactive}
2616+ commandButton = "On", cmdtestinj4on ,{!testenabled & testactive}
2617+ commandButton = "PWM", cmdtestinj450dc, {!testenabled & testactive} ;[PJSC v1.01]
2618+ field = "PWM freq.", dutyFreqTst4, {!testenabled & testactive} ;[PJSC v1.01]
2619+ field = "Duty ratio", dutyRatioTst4, {!testenabled & testactive} ;[PJSC v1.01]
2620+
2621+ dialog = outputtest_injectors, "Injector Driver Output Test", xAxis
2622+ panel = outputtestinj1
2623+ panel = outputtestinj2
2624+ panel = outputtestinj3
2625+ panel = outputtestinj4
2626+
2627+ dialog = outputtestspk1, "Spark CH1 ", yAxis
2628+ commandButton = "Off", cmdtestspk1off,{testactive}
2629+ commandButton = "50% DC", cmdtestspk150dc,{!testenabled & testactive}
2630+ commandButton = "On", cmdtestspk1on,{!testenabled & testactive}
2631+ dialog = outputtestspk2, "Spark CH2", yAxis
2632+ commandButton = "Off", cmdtestspk2off,{testactive}
2633+ commandButton = "50% DC", cmdtestspk250dc,{!testenabled & testactive}
2634+ commandButton = "On", cmdtestspk2on,{!testenabled & testactive}
2635+ dialog = outputtestspk3, "Spark CH3", yAxis
2636+ commandButton = "Off", cmdtestspk3off,{testactive}
2637+ commandButton = "50% DC", cmdtestspk350dc,{!testenabled & testactive}
2638+ commandButton = "On", cmdtestspk3on,{!testenabled & testactive}
2639+ dialog = outputtestspk4, "Spark CH4", yAxis
2640+ commandButton = "Off", cmdtestspk4off,{testactive}
2641+ commandButton = "50% DC", cmdtestspk450dc,{!testenabled & testactive}
2642+ commandButton = "On", cmdtestspk4on,{!testenabled & testactive}
2643+
2644+ dialog = outputtest_spark, "Spark Driver Output Test", xAxis
2645+ panel = outputtestspk1
2646+ panel = outputtestspk2
2647+ panel = outputtestspk3
2648+ panel = outputtestspk4
2649+
2650+ dialog = outputtestmux1, "MUX1", yAxis ;[PJSC v1.01]
2651+ commandButton = "Off", cmdtestmux1off, {testactive} ; |
2652+ commandButton = "On", cmdtestmux1on, {!testenabled && testactive && muxout1selection == 0 } ; |
2653+ commandButton = "PWM", cmdtestmux150dc, {!testenabled && testactive && muxout1selection == 0 } ; |
2654+ field = "PWM freq.", dutyFreqTst9, {!testenabled && testactive && muxout1selection == 0 } ; |
2655+ field = "Duty ratio", dutyRatioTst9, {!testenabled && testactive && muxout1selection == 0 } ; |
2656+ dialog = outputtestmux2, "MUX2", yAxis ; |
2657+ commandButton = "Off", cmdtestmux2off, {testactive} ; |
2658+ commandButton = "On", cmdtestmux2on, {!testenabled && testactive && muxout2selection == 0 } ; |
2659+ commandButton = "PWM", cmdtestmux250dc, {!testenabled && testactive && muxout2selection == 0 } ; |
2660+ field = "PWM freq.", dutyFreqTst10, {!testenabled && testactive && muxout2selection == 0 } ; |
2661+ field = "Duty ratio", dutyRatioTst10, {!testenabled && testactive && muxout2selection == 0 } ; |
2662+ dialog = outputtestmux3, "MUX3", yAxis ; |
2663+ commandButton = "Off", cmdtestmux3off, {testactive && pinLayout == 64} ; |
2664+ commandButton = "On", cmdtestmux3on, {!testenabled && testactive && muxout3selection == 0 && pinLayout == 64} ; |
2665+; commandButton = "PWM", cmdtestmux350dc, {!testenabled && testactive && muxout3selection == 0 && pinLayout == 64} ; |
2666+; field = "PWM freq.", dutyFreqTst11, {!testenabled && testactive && muxout3selection == 0 && pinLayout == 64} ; |
2667+; field = "Duty ratio", dutyRatioTst11, {!testenabled && testactive && muxout3selection == 0 && pinLayout == 64} ; |
2668+ dialog = outputtestmux4, "MUX4", yAxis ; |
2669+ commandButton = "Off", cmdtestmux4off, {testactive && pinLayout == 64} ; |
2670+ commandButton = "On", cmdtestmux4on, {!testenabled && testactive && muxout4selection == 0 && pinLayout == 64} ; |
2671+; commandButton = "PWM", cmdtestmux450dc, {!testenabled && testactive && muxout4selection == 0 && pinLayout == 64} ; |
2672+; field = "PWM freq.", dutyFreqTst12, {!testenabled && testactive && muxout4selection == 0 && pinLayout == 64} ; |
2673+; field = "Duty ratio", dutyRatioTst12, {!testenabled && testactive && muxout4selection == 0 && pinLayout == 64} ; |
2674+ ; |
2675+ dialog = outputtest_mux, "MUX Output Test", xAxis ; |
2676+ panel = outputtestmux1 ; |
2677+ panel = outputtestmux2 ; |
2678+ panel = outputtestmux3, { pinLayout == 64 } ; V
2679+ panel = outputtestmux4, { pinLayout == 64 } ;[PJSC v1.01]
2680+
2681+;[PJSC v1.01] dialog = outputtest1,"Test Output Hardware"
2682+ dialog = outputtest1,"Output Test Mode - PWM" ;[PJSC v1.01]
2683+ topicHelp = "http://speeduino.com/wiki/index.php/Hardware_testing_page"
2684+ panel = enableoutputtestbuttons
2685+ panel = enablefuelpumpbuttons ;[PJSC v1.01]
2686+ panel = outputtest_injectors
2687+#if table4_spark ;[PJSC v1.01] For switching table4
2688+ panel = outputtest_spark
2689+#endif ;[PJSC v1.01] For switching table4
2690+ panel = outputtest_mux ;[PJSC v1.01]
2691+ ;panel = outputtest_io2
2692+ panel = outputtest_warningmessage
2693+
2694+;[PJSC v1.01] For test mode - outputs pulse =========================================================================
2695+ dialog = outputTestbuttons1a, "", xAxis
2696+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
2697+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
2698+ ; a status bit there would be the expected real expression
2699+ commandButton = "Enable Test Mode", cmdEnableTestMode,{!testenabled & !testactive }
2700+
2701+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
2702+ ; dialog close, but only if the enable condition is true
2703+ ; valid click flags are:
2704+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
2705+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
2706+ ; clickOnClose - the command will be sent on dialog close always
2707+ commandButton = "Disable Test Mode", cmdStopTestMode,{testactive}, clickOnCloseIfEnabled
2708+
2709+ dialog = outputTestbuttons1b, ""
2710+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
2711+
2712+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
2713+ panel = outputTestbuttons1a
2714+ panel = outputTestbuttons1b
2715+
2716+ dialog = outputTestbuttons2, "Fuel pump", xAxis
2717+ commandButton = "Fuel Pump On", cmdfpon
2718+ commandButton = "Fuel Pump Off", cmdfpoff
2719+
2720+ dialog = outputtest_l, "Output Test Modes", yAxis
2721+
2722+ dialog = outputtest_inj_l, "", yAxis
2723+ field = "Output Interval", testint
2724+ displayOnlyField = "RPM (Full Sequential)", testrpm
2725+ field = "Injector Testing Mode", testop_inj
2726+ field = "Injector Channel To Test", testsel_inj
2727+ field = "Pulsewidth", testpw
2728+ field = "Total Number Of Injections", testinjcnt
2729+
2730+ dialog = outputtest_inj_r, "", yAxis
2731+ commandButton = "Start", cmdtestinjstart
2732+ commandButton = "Stop", cmdtestinjstop
2733+
2734+ dialog = outputtest_inj, "Injector Testing", xAxis
2735+ panel = outputtest_inj_l
2736+ panel = outputtest_inj_r
2737+
2738+ dialog = outputtest_controls, "Output Test Modes", yAxis
2739+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
2740+ panel = outputTestbuttons1
2741+ panel = outputTestbuttons2
2742+ panel = outputtest_inj
2743+
2744+ dialog = outputtest_r, "Reference Gauges", yAxis
2745+ gauge = batteryVoltage, North
2746+ gauge = injcountGauge, South
2747+
2748+ dialog = outputtest2,"Output Test Mode - Pulse", xAxis
2749+ panel = outputtest_controls
2750+ panel = outputtest_r
2751+
2752+;[PJSC v1.01] For test mode - outputs pulse =========================================================================
2753+
2754+ dialog = Auxin_north
2755+ displayOnlyField = #"Secondary Serial ENABLED", blankfield, {enable_secondarySerial},{enable_secondarySerial}
2756+ displayOnlyField = !"Secondary Serial DISABLED", blankfield, {enable_secondarySerial == 0},{enable_secondarySerial == 0}
2757+ displayOnlyField = #"Internal CANBUS ENABLED", blankfield, {enable_intcan && intcan_available},{enable_intcan && intcan_available}
2758+ displayOnlyField = !"Internal CANBUS DISABLED", blankfield, {enable_intcan == 0 && intcan_available},{enable_intcan == 0 && intcan_available}
2759+ displayOnlyField = !"Internal CANBUS NOT AVAILABLE to MCU", blankfield, {enable_intcan == 1 && intcan_available == 0},{enable_intcan == 1 && intcan_available == 0}
2760+ displayOnlyField = !"Internal CANBUS NOT AVAILABLE to MCU", blankfield, {enable_intcan == 0 && intcan_available == 0},{enable_intcan == 0 && intcan_available == 0}
2761+ field = " If Secondary Serial or Internal CANBUS is DISABLED then any input channel assigned to that external source will NOT function"
2762+
2763+ dialog = canAuxinput_alias, "", yAxis
2764+ field = "Input Alias"
2765+ field = "", AUXin00Alias , {(caninput_sel0a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2766+ field = "", AUXin01Alias , {(caninput_sel1a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2767+ field = "", AUXin02Alias , {(caninput_sel2a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2768+ field = "", AUXin03Alias , {(caninput_sel3a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2769+ field = "", AUXin04Alias , {(caninput_sel4a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2770+ field = "", AUXin05Alias , {(caninput_sel5a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2771+ field = "", AUXin06Alias , {(caninput_sel6a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2772+ field = "", AUXin07Alias , {(caninput_sel7a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2773+ field = "", AUXin08Alias , {(caninput_sel8a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2774+ field = "", AUXin09Alias , {(caninput_sel9a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2775+ field = "", AUXin10Alias , {(caninput_sel10a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2776+ field = "", AUXin11Alias , {(caninput_sel11a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2777+ field = "", AUXin12Alias , {(caninput_sel12a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2778+ field = "", AUXin13Alias , {(caninput_sel13a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2779+ field = "", AUXin14Alias , {(caninput_sel14a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2780+ field = "", AUXin15Alias , {(caninput_sel15a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
2781+
2782+ dialog = caninput_sel, ""
2783+ ;CAN inputs
2784+ field = " CAN Input Channel on/off"
2785+ field = "CAN Input 0", caninput_sel0a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2786+ field = "CAN Input 0", caninput_sel0b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2787+ field = "CAN Input 1", caninput_sel1a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2788+ field = "CAN Input 1", caninput_sel1b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2789+ field = "CAN Input 2", caninput_sel2a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2790+ field = "CAN Input 2", caninput_sel2b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2791+ field = "CAN Input 3", caninput_sel3a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2792+ field = "CAN Input 3", caninput_sel3b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2793+ field = "CAN Input 4", caninput_sel4a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2794+ field = "CAN Input 4", caninput_sel4b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2795+ field = "CAN Input 5", caninput_sel5a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2796+ field = "CAN Input 5", caninput_sel5b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2797+ field = "CAN Input 6", caninput_sel6a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2798+ field = "CAN Input 6", caninput_sel6b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2799+ field = "CAN Input 7", caninput_sel7a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2800+ field = "CAN Input 7", caninput_sel7b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2801+ field = "CAN Input 8", caninput_sel8a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2802+ field = "CAN Input 8", caninput_sel8b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2803+ field = "CAN Input 9", caninput_sel9a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2804+ field = "CAN Input 9", caninput_sel9b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2805+ field = "CAN Input 10", caninput_sel10a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2806+ field = "CAN Input 10", caninput_sel10b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2807+ field = "CAN Input 11", caninput_sel11a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2808+ field = "CAN Input 11", caninput_sel11b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2809+ field = "CAN Input 12", caninput_sel12a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2810+ field = "CAN Input 12", caninput_sel12b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2811+ field = "CAN Input 13", caninput_sel13a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2812+ field = "CAN Input 13", caninput_sel13b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2813+ field = "CAN Input 14", caninput_sel14a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2814+ field = "CAN Input 14", caninput_sel14b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2815+ field = "CAN Input 15", caninput_sel15a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
2816+ field = "CAN Input 15", caninput_sel15b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
2817+
2818+ dialog = caninput_parameter_group, "", yAxis
2819+ field = " Source CAN Address"
2820+ field = "", caninput_source_can_address0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2821+ field = "", caninput_source_can_address1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2822+ field = "", caninput_source_can_address2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2823+ field = "", caninput_source_can_address3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2824+ field = "", caninput_source_can_address4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2825+ field = "", caninput_source_can_address5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2826+ field = "", caninput_source_can_address6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2827+ field = "", caninput_source_can_address7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2828+ field = "", caninput_source_can_address8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2829+ field = "", caninput_source_can_address9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2830+ field = "", caninput_source_can_address10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2831+ field = "", caninput_source_can_address11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2832+ field = "", caninput_source_can_address12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2833+ field = "", caninput_source_can_address13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2834+ field = "", caninput_source_can_address14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2835+ field = "", caninput_source_can_address15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2836+
2837+ dialog = caninput_parameter_start_byte, "", yAxis
2838+ field = " source data start byte"
2839+ field = "", caninput_source_start_byte0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2840+ field = "", caninput_source_start_byte1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2841+ field = "", caninput_source_start_byte2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2842+ field = "", caninput_source_start_byte3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2843+ field = "", caninput_source_start_byte4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2844+ field = "", caninput_source_start_byte5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2845+ field = "", caninput_source_start_byte6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2846+ field = "", caninput_source_start_byte7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2847+ field = "", caninput_source_start_byte8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2848+ field = "", caninput_source_start_byte9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2849+ field = "", caninput_source_start_byte10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2850+ field = "", caninput_source_start_byte11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2851+ field = "", caninput_source_start_byte12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2852+ field = "", caninput_source_start_byte13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2853+ field = "", caninput_source_start_byte14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2854+ field = "", caninput_source_start_byte15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2855+
2856+ dialog = caninput_parameter_num_byte, "", yAxis
2857+ field = "Input Parameter Number of Bytes"
2858+ field = "", caninput_source_num_bytes0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2859+ field = "", caninput_source_num_bytes1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2860+ field = "", caninput_source_num_bytes2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2861+ field = "", caninput_source_num_bytes3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2862+ field = "", caninput_source_num_bytes4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2863+ field = "", caninput_source_num_bytes5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2864+ field = "", caninput_source_num_bytes6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2865+ field = "", caninput_source_num_bytes7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2866+ field = "", caninput_source_num_bytes8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2867+ field = "", caninput_source_num_bytes9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2868+ field = "", caninput_source_num_bytes10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2869+ field = "", caninput_source_num_bytes11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2870+ field = "", caninput_source_num_bytes12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2871+ field = "", caninput_source_num_bytes13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2872+ field = "", caninput_source_num_bytes14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2873+ field = "", caninput_source_num_bytes15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
2874+
2875+ dialog = caninput_serial_can, "", yAxis
2876+ field = "Serial/CAN"
2877+ field = "", caninput_sel0extsourcea, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2878+ field = "", caninput_sel0extsourceb, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2879+ field = "", caninput_sel0extsourcec, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2880+ field = "", caninput_sel1extsourcea, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2881+ field = "", caninput_sel1extsourceb, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2882+ field = "", caninput_sel1extsourcec, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2883+ field = "", caninput_sel2extsourcea, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2884+ field = "", caninput_sel2extsourceb, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2885+ field = "", caninput_sel2extsourcec, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2886+ field = "", caninput_sel3extsourcea, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2887+ field = "", caninput_sel3extsourceb, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2888+ field = "", caninput_sel3extsourcec, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2889+ field = "", caninput_sel4extsourcea, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2890+ field = "", caninput_sel4extsourceb, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2891+ field = "", caninput_sel4extsourcec, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2892+ field = "", caninput_sel5extsourcea, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2893+ field = "", caninput_sel5extsourceb, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2894+ field = "", caninput_sel5extsourcec, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2895+ field = "", caninput_sel6extsourcea, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2896+ field = "", caninput_sel6extsourceb, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2897+ field = "", caninput_sel6extsourcec, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2898+ field = "", caninput_sel7extsourcea, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2899+ field = "", caninput_sel7extsourceb, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2900+ field = "", caninput_sel7extsourcec, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2901+ field = "", caninput_sel8extsourcea, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2902+ field = "", caninput_sel8extsourceb, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2903+ field = "", caninput_sel8extsourcec, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2904+ field = "", caninput_sel9extsourcea, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2905+ field = "", caninput_sel9extsourceb, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2906+ field = "", caninput_sel9extsourcec, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2907+ field = "", caninput_sel10extsourcea, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2908+ field = "", caninput_sel10extsourceb, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2909+ field = "", caninput_sel10extsourcec, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2910+ field = "", caninput_sel11extsourcea, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
2911+ field = "", caninput_sel11extsourceb, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2912+ field = "", caninput_sel11extsourcec, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2913+ field = "", caninput_sel12extsourcea, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
2914+ field = "", caninput_sel12extsourceb, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2915+ field = "", caninput_sel12extsourcec, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2916+ field = "", caninput_sel13extsourcea, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
2917+ field = "", caninput_sel13extsourceb, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2918+ field = "", caninput_sel13extsourcec, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2919+ field = "", caninput_sel14extsourcea, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
2920+ field = "", caninput_sel14extsourceb, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2921+ field = "", caninput_sel14extsourcec, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2922+ field = "", caninput_sel15extsourcea, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
2923+ field = "", caninput_sel15extsourceb, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
2924+ field = "", caninput_sel15extsourcec, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
2925+
2926+ dialog = caninconfig_blank1,""
2927+ field = ""
2928+
2929+ dialog = Canin_config1, "", xAxis
2930+ panel = canAuxinput_alias
2931+ panel = caninconfig_blank1
2932+ panel = caninput_sel
2933+ panel = caninconfig_blank1
2934+ panel = caninput_serial_can
2935+ panel = caninconfig_blank1
2936+ panel = caninput_parameter_group
2937+ panel = caninconfig_blank1
2938+ panel = caninput_parameter_start_byte
2939+ panel = caninconfig_blank1
2940+ panel = caninput_parameter_num_byte
2941+
2942+ ;dialog = Canin_config2, "External Data Input"
2943+ ; field = "Enable External data input", enable_intcandata_in
2944+
2945+ dialog = Canin_config, "",yAxis
2946+ topicHelp = "http://speeduino.com/wiki/index.php/Secondary_Serial_IO_interface#Read_external_analog_data"
2947+ panel = Auxin_north
2948+ panel = Canin_config1
2949+
2950+ dialog = canAuxoutput_alias, "", yAxis
2951+ field = "Input Alias"
2952+ field = "", AUXin00Alias , {canoutput_sel0}
2953+ field = "", AUXin01Alias , {canoutput_sel1}
2954+ field = "", AUXin02Alias , {canoutput_sel2}
2955+ field = "", AUXin03Alias , {canoutput_sel3}
2956+ field = "", AUXin04Alias , {canoutput_sel4}
2957+ field = "", AUXin05Alias , {canoutput_sel5}
2958+ field = "", AUXin06Alias , {canoutput_sel6}
2959+ field = "", AUXin07Alias , {canoutput_sel7}
2960+ ;field = "", AUXin08Alias , {canoutput_sel8}
2961+ ;field = "", AUXin09Alias , {canoutput_sel9}
2962+ ;field = "", AUXin10Alias , {canoutput_sel10}
2963+ ;field = "", AUXin11Alias , {canoutput_sel11}
2964+ ;field = "", AUXin12Alias , {canoutput_sel12}
2965+ ;field = "", AUXin13Alias , {canoutput_sel13}
2966+ ;field = "", AUXin14Alias , {canoutput_sel14}
2967+ ;field = "", AUXin15Alias , {canoutput_sel15}
2968+
2969+ dialog = canoutput_sel, "", yAxis
2970+ ;CAN outputs
2971+ field = "CAN Output Channel on/off"
2972+ field = "CAN Output 0", canoutput_sel0, { enable_intcandata_out}
2973+ field = "CAN Output 1", canoutput_sel1, { enable_intcandata_out }
2974+ field = "CAN Output 2", canoutput_sel2, { enable_intcandata_out }
2975+ field = "CAN Output 3", canoutput_sel3, { enable_intcandata_out }
2976+ field = "CAN Output 4", canoutput_sel4, { enable_intcandata_out }
2977+ field = "CAN Output 5", canoutput_sel5, { enable_intcandata_out }
2978+ field = "CAN Output 6", canoutput_sel6, { enable_intcandata_out }
2979+ field = "CAN Output 7", canoutput_sel7, { enable_intcandata_out }
2980+ ; field = "CAN Output 8", canoutput_sel8, { enable_intcandata_out}
2981+ ; field = "CAN Output 9", canoutput_sel9, { enable_intcandata_out }
2982+ ; field = "CAN Output 10", canoutput_sel10, { enable_intcandata_out }
2983+ ; field = "CAN Output 11", canoutput_sel11, { enable_intcandata_out }
2984+ ; field = "CAN Output 12", canoutput_sel12, { enable_intcandata_out }
2985+ ; field = "CAN Output 13", canoutput_sel13, { enable_intcandata_out }
2986+ ; field = "CAN Output 14", canoutput_sel14, { enable_intcandata_out }
2987+ ; field = "CAN Output 15", canoutput_sel15, { enable_intcandata_out }
2988+
2989+ dialog = canoutput_parameter_group, "", yAxis
2990+ field = "Output Parameter Group"
2991+ field = "", canoutput_param_group[0], { canoutput_sel0 && enable_intcandata_out }
2992+ field = "", canoutput_param_group[1], { canoutput_sel1 && enable_intcandata_out }
2993+ field = "", canoutput_param_group[2], { canoutput_sel3 && enable_intcandata_out }
2994+ field = "", canoutput_param_group[3], { canoutput_sel3 && enable_intcandata_out }
2995+ field = "", canoutput_param_group[4], { canoutput_sel4 && enable_intcandata_out }
2996+ field = "", canoutput_param_group[5], { canoutput_sel5 && enable_intcandata_out }
2997+ field = "", canoutput_param_group[6], { canoutput_sel6 && enable_intcandata_out }
2998+ field = "", canoutput_param_group[7], { canoutput_sel7 && enable_intcandata_out }
2999+ ; field = "", canoutput_param_group[8], { canoutput_sel9 && enable_intcandata_out }
3000+ ; field = "", canoutput_param_group[9], { canoutput_sel10 && enable_intcandata_out }
3001+ ; field = "", canoutput_param_group[10], { canoutput_sel1 && enable_intcandata_out }
3002+ ; field = "", canoutput_param_group[11], { canoutput_sel2 && enable_intcandata_out }
3003+ ; field = "", canoutput_param_group[12], { canoutput_sel3 && enable_intcandata_out }
3004+ ; field = "", canoutput_param_group[13], { canoutput_sel4 && enable_intcandata_out }
3005+ ; field = "", canoutput_param_group[14], { canoutput_sel5 && enable_intcandata_out }
3006+ ; field = "", canoutput_param_group[15], { canoutput_sel6 && enable_intcandata_out }
3007+
3008+ dialog = canoutput_parameter_start_byte, "", yAxis
3009+ field = "Output Parameter Start Byte"
3010+ field = "", canoutput_param_start_byte0, { canoutput_sel0 && enable_intcandata_out }
3011+ field = "", canoutput_param_start_byte1, { canoutput_sel1 && enable_intcandata_out }
3012+ field = "", canoutput_param_start_byte2, { canoutput_sel2 && enable_intcandata_out }
3013+ field = "", canoutput_param_start_byte3, { canoutput_sel3 && enable_intcandata_out }
3014+ field = "", canoutput_param_start_byte4, { canoutput_sel4 && enable_intcandata_out }
3015+ field = "", canoutput_param_start_byte5, { canoutput_sel5 && enable_intcandata_out }
3016+ field = "", canoutput_param_start_byte6, { canoutput_sel6 && enable_intcandata_out }
3017+ field = "", canoutput_param_start_byte7, { canoutput_sel7 && enable_intcandata_out }
3018+ ; field = "", canoutput_param_start_byte8, { canoutput_sel8 && enable_intcandata_out }
3019+ ; field = "", canoutput_param_start_byte9, { canoutput_sel9 && enable_intcandata_out }
3020+ ; field = "", canoutput_param_start_byte10, { canoutput_sel10 && enable_intcandata_out }
3021+ ; field = "", canoutput_param_start_byte11, { canoutput_sel11 && enable_intcandata_out }
3022+ ; field = "", canoutput_param_start_byte12, { canoutput_sel12 && enable_intcandata_out }
3023+ ; field = "", canoutput_param_start_byte13, { canoutput_sel13 && enable_intcandata_out }
3024+; field = "", canoutput_param_start_byte14, { canoutput_sel14 && enable_intcandata_out }
3025+ ; field = "", canoutput_param_start_byte15, { canoutput_sel15 && enable_intcandata_out }
3026+
3027+ dialog = canoutput_parameter_num_byte, "", yAxis
3028+ field = "Output Parameter Number of Bytes"
3029+ field = "", canoutput_param_num_bytes0, { canoutput_sel0 && enable_intcandata_out }
3030+ field = "", canoutput_param_num_bytes1, { canoutput_sel1 && enable_intcandata_out }
3031+ field = "", canoutput_param_num_bytes2, { canoutput_sel2 && enable_intcandata_out }
3032+ field = "", canoutput_param_num_bytes3, { canoutput_sel3 && enable_intcandata_out }
3033+ field = "", canoutput_param_num_bytes4, { canoutput_sel4 && enable_intcandata_out }
3034+ field = "", canoutput_param_num_bytes5, { canoutput_sel5 && enable_intcandata_out }
3035+ field = "", canoutput_param_num_bytes6, { canoutput_sel6 && enable_intcandata_out }
3036+ field = "", canoutput_param_num_bytes7, { canoutput_sel7 && enable_intcandata_out }
3037+ ; field = "", canoutput_param_num_bytes8, { canoutput_sel8 && enable_intcandata_out }
3038+ ; field = "", canoutput_param_num_bytes9, { canoutput_sel9 && enable_intcandata_out }
3039+ ; field = "", canoutput_param_num_bytes10, { canoutput_sel10 && enable_intcandata_out }
3040+ ; field = "", canoutput_param_num_bytes11, { canoutput_sel11 && enable_intcandata_out }
3041+ ; field = "", canoutput_param_num_bytes12, { canoutput_sel12 && enable_intcandata_out }
3042+ ; field = "", canoutput_param_num_bytes13, { canoutput_sel13 && enable_intcandata_out }
3043+; field = "", canoutput_param_num_bytes14, { canoutput_sel14 && enable_intcandata_out }
3044+ ; field = "", canoutput_param_num_bytes15, { canoutput_sel15 && enable_intcandata_out }
3045+
3046+ dialog = canoutconfig_blank1,""
3047+ field = ""
3048+
3049+ dialog = Canout_config1, "", xAxis
3050+ panel = canAuxoutput_alias
3051+ panel = canoutconfig_blank1
3052+ panel = canoutput_sel
3053+ panel = canoutconfig_blank1
3054+ panel = canoutput_parameter_group
3055+ panel = canoutconfig_blank1
3056+ panel = canoutput_parameter_start_byte
3057+ panel = canoutconfig_blank1
3058+ panel = canoutput_parameter_num_byte
3059+
3060+ dialog = Canout_config2, "CAN Data Out"
3061+ field = "Enable CanBus data Output", enable_intcandata_out
3062+
3063+ dialog = Canout_config, "", yAxis
3064+ topicHelp = ""
3065+ panel = Canout_config2
3066+ panel = Canout_config1
3067+
3068+ dialog = can_serial3IO, "CanBus/Secondary Serial IO interface"
3069+ topicHelp = "http://speeduino.com/wiki/index.php/Secondary_Serial_IO_interface"
3070+ field = "Enable Second Serial", enable_secondarySerial
3071+ field = "Enable Internal Canbus", enable_intcan
3072+ ; field = "Speeduino TsCanId", speeduino_tsCanId
3073+ field = "True Canbus Address", true_address {enable_secondarySerial||enable_intcan}
3074+ field = "NOTE! Realtime Data Base Address MUST be at least 0x16 GREATER than the True Address as they are reserved for future expansion"
3075+ field = "Realtime Data Base Can Address", realtime_base_address {enable_secondarySerial||enable_intcan}
3076+ ; field = "Speeduino OBD address", obd_address
3077+
3078+ dialog = serial3IO, "Secondary Serial IO interface"
3079+ topicHelp = "http://speeduino.com/wiki/index.php/Serial3_IO_interface"
3080+ field = "Enable Second Serial", enable_secondarySerial
3081+ field = "Enable Internal Canbus", enable_intcan {intcan_available}
3082+ ; field = "Speeduino TsCanId", speeduino_tsCanId
3083+ field = "True Canbus Address", true_address {enable_secondarySerial||enable_intcan}
3084+ field = "NOTE! Realtime Data Base Address MUST be at least 0x16 GREATER than the True Address as they are reserved for future expansion"
3085+ field = "Realtime Data Base Can Address", realtime_base_address {enable_secondarySerial||enable_intcan}
3086+ ; field = "Speeduino OBD address", obd_address
3087+
3088+ dialog = reset_control, "Reset Control"
3089+ ; Control type options for custom firmware
3090+ field = "Control Type", resetControl
3091+ field = "Control Pin", resetControlPin
3092+
3093+ dialog = Auxinput_pin_selection, "", yAxis
3094+ field = " Source"
3095+ 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)))}
3096+ 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)}
3097+ 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)}
3098+ 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 )))}
3099+ 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 )))}
3100+
3101+ 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)))}
3102+ 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)}
3103+ 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)}
3104+ 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 )))}
3105+ 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 )))}
3106+
3107+ 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))}
3108+ 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)}
3109+ 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)}
3110+ 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 )))}
3111+ 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 )))}
3112+
3113+ 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))}
3114+ 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)}
3115+ 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)}
3116+ 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 )))}
3117+ 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 )))}
3118+
3119+ 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))}
3120+ 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)}
3121+ 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)}
3122+ 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 )))}
3123+ 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 )))}
3124+
3125+ 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))}
3126+ 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)}
3127+ 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)}
3128+ 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 )))}
3129+ 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 )))}
3130+
3131+ 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))}
3132+ 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)}
3133+ 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)}
3134+ 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 )))}
3135+ 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 )))}
3136+
3137+ 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))}
3138+ 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)}
3139+ 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)}
3140+ 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 )))}
3141+ 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 )))}
3142+
3143+ 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))}
3144+ 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)}
3145+ 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)}
3146+ 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 )))}
3147+ 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 )))}
3148+
3149+ 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))}
3150+ 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)}
3151+ 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)}
3152+ 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 )))}
3153+ 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 )))}
3154+
3155+ 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))}
3156+ 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)}
3157+ 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)}
3158+ 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 )))}
3159+ 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 )))}
3160+
3161+ 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))}
3162+ 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)}
3163+ 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)}
3164+ 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 )))}
3165+ 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 )))}
3166+
3167+ 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))}
3168+ 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)}
3169+ 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)}
3170+ 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 )))}
3171+ 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 )))}
3172+
3173+ 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))}
3174+ 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)}
3175+ 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)}
3176+ 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 )))}
3177+ 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 )))}
3178+
3179+ 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))}
3180+ 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)}
3181+ 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)}
3182+ 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 )))}
3183+ 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 )))}
3184+
3185+ 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))}
3186+ 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)}
3187+ 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)}
3188+ 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 )))}
3189+ 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 )))}
3190+
3191+ dialog = Auxinput_alias, "", yAxis
3192+ field = "Input Alias"
3193+ field = "", AUXin00Alias , {(caninput_sel0a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3194+ field = "", AUXin01Alias , {(caninput_sel1a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3195+ field = "", AUXin02Alias , {(caninput_sel2a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3196+ field = "", AUXin03Alias , {(caninput_sel3a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3197+ field = "", AUXin04Alias , {(caninput_sel4a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3198+ field = "", AUXin05Alias , {(caninput_sel5a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3199+ field = "", AUXin06Alias , {(caninput_sel6a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3200+ field = "", AUXin07Alias , {(caninput_sel7a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3201+ field = "", AUXin08Alias , {(caninput_sel8a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3202+ field = "", AUXin09Alias , {(caninput_sel9a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3203+ field = "", AUXin10Alias , {(caninput_sel10a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3204+ field = "", AUXin11Alias , {(caninput_sel11a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3205+ field = "", AUXin12Alias , {(caninput_sel12a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3206+ field = "", AUXin13Alias , {(caninput_sel13a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3207+ field = "", AUXin14Alias , {(caninput_sel14a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3208+ field = "", AUXin15Alias , {(caninput_sel15a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
3209+
3210+ dialog = Auxinput_channelenable, "", yAxis
3211+ field = " Aux Input Channel Enable"
3212+ field = "AUX Input 0", caninput_sel0a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3213+ field = "AUX Input 0", caninput_sel0b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3214+ field = "AUX Input 1", caninput_sel1a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3215+ field = "AUX Input 1", caninput_sel1b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3216+ field = "AUX Input 2", caninput_sel2a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3217+ field = "AUX Input 2", caninput_sel2b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3218+ field = "AUX Input 3", caninput_sel3a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3219+ field = "AUX Input 3", caninput_sel3b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3220+ field = "AUX Input 4", caninput_sel4a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3221+ field = "AUX Input 4", caninput_sel4b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3222+ field = "AUX Input 5", caninput_sel5a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3223+ field = "AUX Input 5", caninput_sel5b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3224+ field = "AUX Input 6", caninput_sel6a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3225+ field = "AUX Input 6", caninput_sel6b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3226+ field = "AUX Input 7", caninput_sel7a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3227+ field = "AUX Input 7", caninput_sel7b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3228+ field = "AUX Input 8", caninput_sel8a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3229+ field = "AUX Input 8", caninput_sel8b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3230+ field = "AUX Input 9", caninput_sel9a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3231+ field = "AUX Input 9", caninput_sel9b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3232+ field = "AUX Input 10", caninput_sel10a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3233+ field = "AUX Input 10", caninput_sel10b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3234+ field = "AUX Input 11", caninput_sel11a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3235+ field = "AUX Input 11", caninput_sel11b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3236+ field = "AUX Input 12", caninput_sel12a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3237+ field = "AUX Input 12", caninput_sel12b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3238+ field = "AUX Input 13", caninput_sel13a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3239+ field = "AUX Input 13", caninput_sel13b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3240+ field = "AUX Input 14", caninput_sel14a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3241+ field = "AUX Input 14", caninput_sel14b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3242+ field = "AUX Input 15", caninput_sel15a {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
3243+ field = "AUX Input 15", caninput_sel15b {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
3244+
3245+ dialog = Auxin_south, "Auxillary Input Configuration",xAxis
3246+ panel = Auxinput_alias
3247+ panel = Auxinput_channelenable
3248+ panel = Auxinput_pin_selection
3249+
3250+ dialog = Auxin_config, "",yAxis
3251+ panel = Auxin_north
3252+ panel = Auxin_south
3253+
3254+;-------------------------------------------------------------------------------
3255+; General help text
3256+
3257+ help = helpGeneral, "Speeduino General Help"
3258+ webHelp = "http://speeduino.com/wiki/index.php/Speeduino"
3259+ text = "For current WIKI documentation, click the Web Help button,"
3260+ text = "or visit http://www.speeduino.com/."
3261+ text = "<br>"
3262+ text = "<br>why not visit our forum http://speeduino.com/forum/"
3263+;------------------------------------------------------------------------------
3264+[ControllerCommands]
3265+; commandName = command1, command2, commandn...
3266+; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order.
3267+; This does not include any resultant protocol envelope data, only the response data itself.
3268+
3269+; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands
3270+; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition
3271+; and may create error messages.
3272+; It is expected that these commands would not typically alter any ram mapped to a Constant.
3273+
3274+cmdStopTestMode = "E\x01\x00"
3275+cmdEnableTestMode = "E\x01\x01"
3276+
3277+cmdtestinj1on = "E\x02\x01"
3278+cmdtestinj1off = "E\x02\x02"
3279+cmdtestinj150dc = "E\x02\x03"
3280+cmdtestinj2on = "E\x02\x04"
3281+cmdtestinj2off = "E\x02\x05"
3282+cmdtestinj250dc = "E\x02\x06"
3283+cmdtestinj3on = "E\x02\x07"
3284+cmdtestinj3off = "E\x02\x08"
3285+cmdtestinj350dc = "E\x02\x09"
3286+cmdtestinj4on = "E\x02\x0A"
3287+cmdtestinj4off = "E\x02\x0B"
3288+cmdtestinj450dc = "E\x02\x0C"
3289+cmdfpon = "E\x02\x11" ;[PJSC v1.01]
3290+cmdfpoff = "E\x02\x12" ;[PJSC v1.01]
3291+cmdtestinjstart = "E\x02\x13" ;[PJSC v1.01]
3292+cmdtestinjstop = "E\x02\x14" ;[PJSC v1.01]
3293+
3294+cmdtestspk1on = "E\x03\x01"
3295+cmdtestspk1off = "E\x03\x02"
3296+cmdtestspk150dc = "E\x03\x03"
3297+cmdtestspk2on = "E\x03\x04"
3298+cmdtestspk2off = "E\x03\x05"
3299+cmdtestspk250dc = "E\x03\x06"
3300+cmdtestspk3on = "E\x03\x07"
3301+cmdtestspk3off = "E\x03\x08"
3302+cmdtestspk350dc = "E\x03\x09"
3303+cmdtestspk4on = "E\x03\x0A"
3304+cmdtestspk4off = "E\x03\x0B"
3305+cmdtestspk450dc = "E\x03\x0C"
3306+
3307+cmdtestmux1on = "E\x04\x01" ;[PJSC v1.01] Test mode command for MUX output
3308+cmdtestmux1off = "E\x04\x02" ; |
3309+cmdtestmux150dc = "E\x04\x03" ; |
3310+cmdtestmux2on = "E\x04\x04" ; |
3311+cmdtestmux2off = "E\x04\x05" ; |
3312+cmdtestmux250dc = "E\x04\x06" ; |
3313+cmdtestmux3on = "E\x04\x07" ; |
3314+cmdtestmux3off = "E\x04\x08" ; |
3315+cmdtestmux350dc = "E\x04\x09" ; |
3316+cmdtestmux4on = "E\x04\x0A" ; |
3317+cmdtestmux4off = "E\x04\x0B" ; V
3318+cmdtestmux450dc = "E\x04\x0C" ;[PJSC v1.01]
3319+
3320+; -------------------------------------------------------------
3321+; Help down here
3322+[SettingContextHelp]
3323+
3324+
3325+[CurveEditor]
3326+
3327+;time-based accel enrichment
3328+ curve = time_accel_tpsdot_curve, "TPS based AE"
3329+ columnLabel = "TPSdot", "Added"
3330+ xAxis = 0, 1200, 6
3331+ yAxis = 0, 250, 4
3332+ xBins = taeBins, TPSdot
3333+ yBins = taeRates
3334+ ;gauge = cltGauge
3335+
3336+; Correction curve for dwell vs battery voltage
3337+ curve = dwell_correction_curve, "Dwell voltage correction"
3338+ columnLabel = "Voltage", "Dwell"
3339+ xAxis = 6, 22, 6
3340+ yAxis = 0, 255, 6
3341+ xBins = brvBins, batteryVoltage
3342+ yBins = dwellRates
3343+
3344+; Correction curve for injectors vs battery voltage
3345+ curve = injector_voltage_curve, "Injector voltage correction"
3346+ columnLabel = "Voltage", "Injector"
3347+ xAxis = 6, 22, 6
3348+ yAxis = 0, 255, 6
3349+ xBins = brvBins, batteryVoltage
3350+ yBins = injBatRates
3351+
3352+; Correction curve for Air Density vs temperature
3353+ curve = airdensity_curve, "IAT density correction"
3354+ columnLabel = "Air Temperature", "Fuel Amount"
3355+ xAxis = -40, 160, 6
3356+ yAxis = 0, 255, 6
3357+ xBins = airDenBins, iat
3358+ yBins = airDenRates
3359+
3360+; IAT based ignition timing retard
3361+ curve = iat_retard_curve, "IAT timing retard"
3362+ columnLabel = "Inlet Air Temp", "Retard"
3363+ xAxis = -40, 200, 5
3364+ yAxis = 0, 30, 5
3365+ xBins = iatRetBins, iat
3366+ yBins = iatRetRates
3367+
3368+; Curves for idle control
3369+ ; Standard duty table for PWM valves
3370+ curve = iacPwm_curve, "IAC PWM Duty"
3371+ columnLabel = "Coolant Temperature", "Valve"
3372+ #if CELSIUS
3373+ xAxis = -40, 215, 6
3374+ #else
3375+ xAxis = -40, 315, 6
3376+ #endif
3377+ yAxis = 0, 100, 4
3378+ xBins = iacBins, coolant
3379+ yBins = iacOLPWMVal
3380+
3381+ ; Cranking duty table for PWM valves
3382+ curve = iacPwmCrank_curve, "IAC PWM Cranking Duty"
3383+ columnLabel = "Coolant Temperature", "Valve"
3384+ xAxis = -40, 215, 6
3385+ yAxis = 0, 100, 4
3386+ xBins = iacCrankBins, coolant
3387+ yBins = iacCrankDuty
3388+
3389+ curve = iacStep_curve, "IAC Stepper Motor"
3390+ columnLabel = "Coolant Temperature", "Motor"
3391+ #if CELSIUS
3392+ xAxis = -40, 215, 6
3393+ #else
3394+ xAxis = -40, 315, 6
3395+ #endif
3396+ yAxis = 0, 850, 4
3397+ xBins = iacBins, coolant
3398+ yBins = iacOLStepVal
3399+
3400+ curve = iacStepCrank_curve, "IAC Stepper Motor Cranking"
3401+ columnLabel = "Coolant Temperature", "Motor"
3402+ xAxis = -40, 120, 6
3403+ yAxis = 0, 850, 4
3404+ xBins = iacCrankBins, coolant
3405+ yBins = iacCrankSteps
3406+
3407+ curve = iacClosedLoop_curve, "IAC Closed Loop Targets"
3408+ columnLabel = "Coolant Temperature", "Motor"
3409+ xAxis = -40, 120, 6
3410+ yAxis = 0, 2000, 4
3411+ xBins = iacBins, coolant
3412+ yBins = iacCLValues
3413+
3414+ curve = rotaryTrailing_curve, "Rotary Trailing Split"
3415+ columnLabel = "Engine load", "Split"
3416+ yAxis = 0, 40, 4
3417+#if SPEED_DENSITY
3418+ xBins = rotarySplitBins, map
3419+ xAxis = 0, 250, 5
3420+#else
3421+ xBins = rotarySplitBins, throttle
3422+ xAxis = 0, 100, 5
3423+#endif
3424+ yBins = rotarySplitValues
3425+
3426+; Warmup enrichment curve
3427+ curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
3428+ columnLabel = "Coolant", "WUE %"
3429+ xAxis = -40, 210, 9
3430+ yAxis = 0, 240, 6
3431+ xBins = wueBins, coolant
3432+ yBins = wueRates
3433+ gauge = cltGauge
3434+
3435+; Cranking enrichment curve
3436+ curve = cranking_enrich_curve, "Cranking Enrichment Curve"
3437+ columnLabel = "Coolant", "Fuel Modifier"
3438+ xAxis = -40, 110, 9
3439+ yAxis = 0, 200, 6
3440+ xBins = crankingEnrichBins, coolant
3441+ yBins = crankingEnrichValues
3442+ ;gauge = cltGau25
3443+
3444+; Warmup enrichment VEAL AFR adjustment curve (Not currently working)
3445+ ;curve = warmup_afr_curve, "AFR Target Temperature Adustment"
3446+ ; columnLabel = "Coolant Temp", "AFR Offset %"
3447+ ; xAxis = -40, 210, 9
3448+ ; yAxis = 0, 240, 6
3449+ ; xBins = wueAFRBins, coolant
3450+ ; yBins = wueAFRRates
3451+
3452+; Flex fuel correction curves
3453+ curve = flex_fuel_curve, "Flex Fuel Adjustments"
3454+ columnLabel = "Ethanol", "Fuel"
3455+ xAxis = 0, 100, 10
3456+ yAxis = 50, 250, 5
3457+ xBins = flexFuelBins, flex
3458+ yBins = flexFuelAdj
3459+ size = 400, 200
3460+
3461+ curve = flex_adv_curve, "Flex Timing Advance"
3462+ columnLabel = "Ethanol", "Advance"
3463+ xAxis = 0, 100, 10
3464+ yAxis = 0, 50, 5
3465+ xBins = flexAdvBins, flex
3466+ yBins = flexAdvAdj
3467+ size = 400, 200
3468+
3469+ curve = flex_boost_curve, "Flex Boost Adjustments"
3470+ columnLabel = "Ethanol", "Boost"
3471+ xAxis = 0, 100, 10
3472+ yAxis = -100, 200, 5
3473+ xBins = flexBoostBins, flex
3474+ yBins = flexBoostAdj
3475+ size = 400, 200
3476+
3477+;Knock sensor windows
3478+ curve = knock_window_angle_curve, "Knock Window"
3479+ columnLabel = "RPM", "Window Start"
3480+ xAxis = 0, 8000, 9
3481+ yAxis = -100, 100, 11
3482+ xBins = knock_window_rpms, rpm
3483+ yBins = knock_window_angle
3484+ size = 400, 200
3485+
3486+ curve = knock_window_duration_curve, "Knock Window Duration"
3487+ columnLabel = "RPM", "Window Duration"
3488+ xAxis = 0, 8000, 9
3489+ yAxis = 0, 100, 10
3490+ xBins = knock_window_rpms, rpm
3491+ yBins = knock_window_dur
3492+ size = 400, 200
3493+
3494+; Correction curve for air Density vs Barometric pressure [PJSC v1.01]
3495+ curve = barodensity_curve, "Barometric density correction"
3496+ columnLabel = "Barometric pressure", "Fuel Amount"
3497+ xAxis = 0, 110, 9
3498+ yAxis = 0, 255, 9
3499+ xBins = baroDenBins, baro
3500+ yBins = baroDenRates
3501+
3502+
3503+[TableEditor]
3504+ ; table_id, map3d_id, "title", page
3505+ table = veTable1Tbl, veTable1Map, "VE Table", 1
3506+ topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3507+ ; constant, variable
3508+ xBins = rpmBins, rpm
3509+ yBins = fuelLoadBins, fuelLoad
3510+ xyLabels = "RPM", "Fuel Load: "
3511+ zBins = veTable
3512+
3513+ gridHeight = 2.0
3514+ gridOrient = 250, 0, 340
3515+ upDownLabel = "(RICHER)", "(LEANER)"
3516+
3517+#if table4_spark //[PJSC v1.01]
3518+ table = sparkTbl, sparkMap, "Ignition Advance Table", 3
3519+ xBins = rpmBins2, rpm
3520+ ;yBins = ignLoadBins, ignLoad
3521+ yBins = mapBins1, ignLoad
3522+ xyLabels = "RPM", "Ignition Load: "
3523+ zBins = advTable1
3524+ gridHeight = 3.0
3525+ upDownLabel = "ADVANCING", "RETARDING"
3526+#endif //[PJSC v1.01]
3527+
3528+ ;table = afrTbl, afrTableMap, "AFR Table", 5
3529+ table = afrTable1Tbl, afrTable1Map, "AFR Table", 5
3530+ xBins = rpmBinsAFR, rpm
3531+ #if SPEED_DENSITY
3532+ yBins = mapBinsAFR, map
3533+ #else ALPHA_N
3534+ yBins = tpsBinsAFR, throttle
3535+ #endif
3536+ zBins = afrTable
3537+ gridHeight = 1.0
3538+ upDownLabel = "RICHER", "LEANER"
3539+ gridOrient = 250, 0, 340
3540+
3541+ ;#if BOOSTPSI
3542+ ;table = boostTbl, boostMap, "Boost targets (PSI)", 8
3543+ ;#else
3544+ ;table = boostTbl, boostMap, "Boost targets (Absolute kPa)", 8
3545+ ;#endif
3546+ table = boostTbl, boostMap, "Boost Duty / Target", 8
3547+ xBins = rpmBinsBoost, rpm
3548+ yBins = tpsBinsBoost, throttle
3549+ zBins = boostTable
3550+ gridHeight = 3.0
3551+ upDownLabel = "HIGHER", "LOWER"
3552+
3553+ table = vvtTbl, vvtMap, "VVT control Table", 8
3554+ xBins = rpmBinsVVT, rpm
3555+ yBins = tpsBinsVVT, throttle
3556+ zBins = vvtTable
3557+ gridHeight = 3.0
3558+ upDownLabel = "HIGHER", "LOWER"
3559+
3560+ table = stagingTbl, stagingMap, "Fuel Staging Table", 10
3561+ xBins = rpmBinsStaging, rpm
3562+ #if SPEED_DENSITY
3563+ yBins = mapBinsStaging, map
3564+ #else ALPHA_N
3565+ yBins = tpsBinsStaging, throttle
3566+ #endif
3567+ zBins = stagingTable
3568+ gridHeight = 3.0
3569+ upDownLabel = "HIGHER", "LOWER"
3570+
3571+;--------- Sequential fuel trim maps -----------
3572+;[PJSC v1.01] table = fuelTrimTable1Tbl, fuelTrimTable1Map, "Fuel trim Table 1", 9
3573+;[PJSC v1.01] topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3574+;[PJSC v1.01] xBins = fuelTrim1rpmBins, rpm
3575+;[PJSC v1.01] #if SPEED_DENSITY
3576+;[PJSC v1.01] yBins = fuelTrim1loadBins, map
3577+;[PJSC v1.01] #else
3578+;[PJSC v1.01] yBins = fuelTrim1loadBins, throttle
3579+;[PJSC v1.01] #endif
3580+;[PJSC v1.01] zBins = fuelTrim1Table
3581+;[PJSC v1.01]
3582+;[PJSC v1.01] gridHeight = 2.0
3583+;[PJSC v1.01] gridOrient = 250, 0, 340
3584+;[PJSC v1.01] upDownLabel = "(RICHER)", "(LEANER)"
3585+;[PJSC v1.01]
3586+;[PJSC v1.01] table = fuelTrimTable2Tbl, fuelTrimTable2Map, "Fuel trim Table 2", 9
3587+;[PJSC v1.01] topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3588+;[PJSC v1.01] xBins = fuelTrim2rpmBins, rpm
3589+;[PJSC v1.01] #if SPEED_DENSITY
3590+;[PJSC v1.01] yBins = fuelTrim2loadBins, map
3591+;[PJSC v1.01] #else
3592+;[PJSC v1.01] yBins = fuelTrim2loadBins, throttle
3593+;[PJSC v1.01] #endif
3594+;[PJSC v1.01] zBins = fuelTrim2Table
3595+;[PJSC v1.01]
3596+;[PJSC v1.01] gridHeight = 2.0
3597+;[PJSC v1.01] gridOrient = 250, 0, 340
3598+;[PJSC v1.01] upDownLabel = "(RICHER)", "(LEANER)"
3599+;[PJSC v1.01]
3600+;[PJSC v1.01] table = fuelTrimTable3Tbl, fuelTrimTable3Map, "Fuel trim Table 3", 9
3601+;[PJSC v1.01] topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3602+;[PJSC v1.01] xBins = fuelTrim3rpmBins, rpm
3603+;[PJSC v1.01] #if SPEED_DENSITY
3604+;[PJSC v1.01] yBins = fuelTrim3loadBins, map
3605+;[PJSC v1.01] #else
3606+;[PJSC v1.01] yBins = fuelTrim3loadBins, throttle
3607+;[PJSC v1.01] #endif
3608+;[PJSC v1.01] zBins = fuelTrim3Table
3609+;[PJSC v1.01]
3610+;[PJSC v1.01] gridHeight = 2.0
3611+;[PJSC v1.01] gridOrient = 250, 0, 340
3612+;[PJSC v1.01] upDownLabel = "(RICHER)", "(LEANER)"
3613+;[PJSC v1.01]
3614+;[PJSC v1.01] table = fuelTrimTable4Tbl, fuelTrimTable4Map, "Fuel trim Table 4", 9
3615+;[PJSC v1.01] topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3616+;[PJSC v1.01] xBins = fuelTrim4rpmBins, rpm
3617+;[PJSC v1.01] #if SPEED_DENSITY
3618+;[PJSC v1.01] yBins = fuelTrim4loadBins, map
3619+;[PJSC v1.01] #else
3620+;[PJSC v1.01] yBins = fuelTrim4loadBins, throttle
3621+;[PJSC v1.01] #endif
3622+;[PJSC v1.01] zBins = fuelTrim4Table
3623+;[PJSC v1.01]
3624+;[PJSC v1.01] gridHeight = 2.0
3625+;[PJSC v1.01] gridOrient = 250, 0, 340
3626+;[PJSC v1.01] upDownLabel = "(RICHER)", "(LEANER)"
3627+
3628+;[PJSC]------------------------------------------------------------------------
3629+ table = veTable2Tbl, veTable2Map, "VE Table 2", 10
3630+ topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3631+ ; constant, variable
3632+ xBins = rpmBinsVE2, rpm
3633+ yBins = fuelLoadBins2, fuelLoad2
3634+ xyLabels = "RPM", "Fuel Load: "
3635+ zBins = veTable2
3636+
3637+ gridHeight = 2.0
3638+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
3639+ upDownLabel = "(RICHER)", "(LEANER)"
3640+
3641+;[PJSC]-------------------------------------------------------------------------
3642+
3643+;[PJSC v1.01]-------------------------------------------------------------------
3644+ table = veTable3Tbl, veTable3Map, "VE Table 3", 11
3645+ topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3646+ ; constant, variable
3647+ xBins = rpmBinsVE3, rpm
3648+ yBins = fuelLoadBins3, fuelLoad3
3649+ xyLabels = "RPM", "Fuel Load: "
3650+ zBins = veTable3
3651+
3652+ gridHeight = 2.0
3653+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
3654+ upDownLabel = "(RICHER)", "(LEANER)"
3655+
3656+#if table4_fuel
3657+ table = sparkTbl, sparkMap, "VE Table 4", 3
3658+ topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
3659+ ; constant, variable
3660+ xBins = rpmBins2, rpm
3661+ ;yBins = ignLoadBins, ignLoad
3662+ yBins = mapBins1, ignLoad
3663+ xyLabels = "RPM", "Fuel Load: "
3664+ zBins = advTable1
3665+
3666+ gridHeight = 2.0
3667+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
3668+ upDownLabel = "(RICHER)", "(LEANER)"
3669+#endif
3670+;[PJSC v1.01]-------------------------------------------------------------------
3671+
3672+;-------------------------------------------------------------------------------
3673+
3674+[GaugeConfigurations]
3675+
3676+ ;-------------------------------------------------------------------------------
3677+ ; Define a gauge's characteristics here, then go to a specific layout
3678+ ; block (Tuning or FrontPage) and use the name you've defined here to
3679+ ; display that gauge in a particular position.
3680+ ;
3681+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
3682+ ; Var = Case-sensitive name of variable to be displayed, see the
3683+ ; OutputChannels block in this file for possible values.
3684+ ; Title = Title displayed at the top of the gauge.
3685+ ; Units = Units displayed below value on gauge.
3686+ ; Lo = Lower scale limit of gauge.
3687+ ; Hi = Upper scale limit of gauge.
3688+ ; LoD = Lower limit at which danger color is used for gauge background.
3689+ ; LoW = Lower limit at which warning color is used.
3690+ ; HiW = Upper limit at which warning color is used.
3691+ ; HiD = Upper limit at which danger color is used.
3692+ ; vd = Decimal places in displayed value
3693+ ; ld = Label decimal places for display of Lo and Hi, above.
3694+
3695+ gaugeCategory = "Main"
3696+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
3697+ accelEnrichGauge = accelEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
3698+ dutyCycleGauge = dutyCycle, "Duty Cycle", "%", 0, 100, -1, -1, 70, 80, 1, 1
3699+ stgDutyCycleGauge = stgDutyCycle, "Staging Duty Cycle", "%", 0, 100, -1, -1, 70, 80, 1, 1
3700+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 0, 0
3701+
3702+ gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0
3703+ pulseWidthGauge = pulseWidth, "Pulse Width", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
3704+;[PJSC v1.01] tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0
3705+ tachometer = rpm, "Engine Speed", "RPM", 0, 13000, 600, 1000,11000,12000, 0, 0 ;[PJSC v1.01]
3706+ veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0
3707+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC]
3708+ veGauge3 = veCurr3, "VE3 Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC v1.01]
3709+ veGauge4 = veCurr4, "VE4 Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC v1.01]
3710+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 200, 130, 140, 140, 150, 0, 0
3711+ aseEnrichGauge = ase_enrich, "Afterstart Enrichment","%", 0, 200, 130, 140, 140, 150, 0, 0
3712+ batCorrectGauge = batCorrection, "Voltage Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
3713+ iatCorrectGauge = airCorrection, "IAT Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
3714+ flexEnrich, = flexFuelCor, "Flex Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
3715+ advanceGauge = advance, "Spark Advance", "deg BTDC", 50, -10, 0, 0, 35, 45, 0, 0
3716+ dwellGauge = dwell, "Ign Dwell", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
3717+
3718+ gaugeCategory = "Sensor inputs"
3719+ mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 0, 0
3720+ mapGauge_psi = map_psi, "Engine MAP (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0
3721+ mapGauge_bar = map_bar, "Engine MAP (BAR)", "Bar", -1, 3, -1, -1, 5, 5, 2, 2
3722+ mapGauge_vacBoost = map_vacboost, "Engine MAP (in-Hg/PSI)", "in-Hg/PSI", -30, 30, -30, -30, 30, 30, 1, 1
3723+ batteryVoltage = batteryVoltage,"Battery Voltage", "volts", 0, 25, 8, 9, 15, 16, 2, 2
3724+
3725+ tpsADCGauge = tpsADC, "TPS ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
3726+ throttleGauge = throttle, "Throttle Position", "%TPS", 0, 100, -1, 1, 90, 100, 0, 0
3727+
3728+ afrGauge = afr, "Air:Fuel Ratio", "", 7, 25, 12, 13, 15, 16, 2, 2
3729+ afrGauge2 = afr2, "Air:Fuel Ratio 2", "", 7, 25, 12, 13, 15, 16, 2, 2
3730+ lambdaGauge = lambda, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
3731+ exValvePosGauge = valvePosition, "Exhaust Valve Position", "%open", 0, 100, -1, 1, 90, 100, 0, 0 ;[PJSC]For External Trigger
3732+ exValveADCGauge = valvePositionADC, "Exhaust Valve ADC", "", 0, 255, -1, -1, 256, 256, 0, 0 ;[PJSC]For External Trigger
3733+ exSparkGauge = sparkedAngle, "Sparked Angle", "deg BTDC", -20, 60, -10, 0, 45, 50, 0, 0 ;[PJSC]For External Trigger
3734+ dutyFreqGauge = dutyFreq, "Duty Pulse Frequency", "Hz", 0, 100, 5, 10, 90, 95, 0, 0 ;[PJSC]For capturing duty pulse
3735+ dutyRatioGauge = dutyRatio, "Duty Ratio", "%", 0, 100, 5, 10, 90, 95, 0, 0 ;[PJSC]For capturing duty pulse
3736+ dutyFreqGauge2 = dutyFreq2, "Duty Pulse Frequency 2", "Hz", 0, 100, 5, 10, 90, 95, 0, 0 ;[PJSC]For capturing duty pulse
3737+ dutyRatioGauge2 = dutyRatio2, "Duty Ratio 2", "%", 0, 100, 5, 10, 90, 95, 0, 0 ;[PJSC]For capturing duty pulse
3738+ baroGauge = baro, "Barometric Pressure", "kPa", 0, 200, 20, 60, 140, 180, 1, 0 ;[PJSC]Add the gage for barometric sensor
3739+ injcountGauge = testCnt, "Injection Count", "pulses", 0, 1000, 65535, 65535,65535, 65535,0, 0 ;[PJSC v1.01] For test mode
3740+
3741+ #if CELSIUS
3742+ cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, -15, 0, 95, 105, 0, 0
3743+ iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, -15, 0, 95, 100, 0, 0
3744+ #else
3745+ cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, 0, 30, 200, 220, 0, 0
3746+ iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, 0, 30, 200, 210, 0, 0
3747+ #endif
3748+ flexGauge = flex, "Flex sensor", "%", 0, 100, -1, -1, 999, 999, 0, 0
3749+
3750+ gaugeCategory = "Auxillary Input Channels"
3751+ AuxInGauge0 = auxin_gauge0, { stringValue(AUXin00Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3752+ AuxInGauge1 = auxin_gauge1, { stringValue(AUXin01Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3753+ AuxInGauge2 = auxin_gauge2, { stringValue(AUXin02Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3754+ AuxInGauge3 = auxin_gauge3, { stringValue(AUXin03Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3755+ AuxInGauge4 = auxin_gauge4, { stringValue(AUXin04Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3756+ AuxInGauge5 = auxin_gauge5, { stringValue(AUXin05Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3757+ AuxInGauge6 = auxin_gauge6, { stringValue(AUXin06Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3758+ AuxInGauge7 = auxin_gauge7, { stringValue(AUXin07Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3759+ AuxInGauge8 = auxin_gauge8, { stringValue(AUXin08Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3760+ AuxInGauge9 = auxin_gauge9, { stringValue(AUXin09Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3761+ AuxInGauge10 = auxin_gauge10, { stringValue(AUXin10Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3762+ AuxInGauge11 = auxin_gauge11, { stringValue(AUXin11Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3763+ AuxInGauge12 = auxin_gauge12, { stringValue(AUXin12Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3764+ AuxInGauge13 = auxin_gauge13, { stringValue(AUXin13Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3765+ AuxInGauge14 = auxin_gauge14, { stringValue(AUXin14Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3766+ AuxInGauge15 = auxin_gauge15, { stringValue(AUXin15Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
3767+
3768+ gaugeCategory = "System Data"
3769+ clockGauge = secl, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
3770+ loopGauge = loopsPerSecond,"Main loop speed", "Loops/S" , 0, 70000, -1, 500,1800, 4000, 0, 0
3771+ memoryGauge = freeRAM, "Free memory", "bytes" , 0, 8000, -1, 1000,8000, 1000, 0, 0
3772+ reqFuelGauge = req_fuel, "Req. Fuel", "ms", 0, 35.0, 1.0, 1.2, 20, 25, 2, 2
3773+ injOpenGauge = inj_open, "Injector Open Time", "ms", 0, 35.0, 1.0, 1.2, 20, 25, 1, 1
3774+ mapMultiplyGauge = map_multiply_amt, "MAP Multiply", "%", 0, 200, 130, 140, 140, 150, 0, 0
3775+ nSquirtsGauge = nSquirts, "# Squirts", "", 0, 10, 130, 140, 140, 150, 0, 0
3776+;-------------------------------------------------------------------------------
3777+
3778+[FrontPage]
3779+
3780+
3781+ ; Gauges are numbered left to right, top to bottom.
3782+ ;
3783+ ; 1 2 3 4
3784+ ; 5 6 7 8
3785+
3786+;[PJSC v1.01] gauge1 = tachometer
3787+;[PJSC v1.01] gauge2 = throttleGauge
3788+;[PJSC v1.01] gauge3 = pulseWidthGauge
3789+;[PJSC v1.01] gauge4 = dutyCycleGauge
3790+;[PJSC v1.01] gauge5 = mapGauge
3791+;[PJSC v1.01] gauge6 = iatGauge
3792+;[PJSC v1.01] gauge7 = cltGauge
3793+;[PJSC v1.01] gauge8 = gammaEnrichGauge
3794+
3795+ gauge1 = tachometer ;[PJSC v1.01]
3796+ gauge2 = throttleGauge ;[PJSC v1.01]
3797+ gauge3 = pulseWidthGauge ;[PJSC v1.01]
3798+ gauge4 = afrGauge ;[PJSC v1.01]
3799+ gauge5 = mapGauge ;[PJSC v1.01]
3800+ gauge6 = iatGauge ;[PJSC v1.01]
3801+ gauge7 = cltGauge ;[PJSC v1.01]
3802+ gauge8 = batteryVoltage ;[PJSC v1.01]
3803+
3804+ ;----------------------------------------------------------------------------
3805+ ; Indicators
3806+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
3807+ indicator = { running }, "Not Running", "Running" white, black, green, black
3808+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
3809+ indicator = { ase }, "ASE OFF", "ASE ON", white, black, green, black
3810+ indicator = { warmup }, "WUE OFF", "WUE ON", white, black, green, black
3811+ indicator = { tpsaccaen }, "Accel", "Accel", white, black, green, black
3812+ indicator = { tpsaccden }, "Decel", "Decel", white, black, green, black
3813+ indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
3814+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
3815+ indicator = { error }, "No Errors", "ERROR", white, black, green, black
3816+ indicator = { (tps > tpsflood) && (rpm < crankRPM) }, "FLOOD OFF", "FLOOD CLEAR", white, black, red, black
3817+ indicator = { DFCOOn }, "DFCO OFF", "DFCO On", white, black, red, black
3818+ indicator = { launchHard }, "Launch Hard", "Launch Hard", white, black, green, black
3819+ indicator = { launchSoft }, "Launch Soft", "Launch Soft", white, black, green, black
3820+ indicator = { softlimitOn }, "Soft Limit OFF","Soft Limiter", white, black, red, black
3821+ indicator = { hardLimitOn }, "Hard Limit OFF","Hard Limiter", white, black, red, black
3822+ indicator = { boostCutOut }, "Ign Cut OFF", "Ign Cut (Boost)", white, black, red, black
3823+ indicator = { sync }, "No Sync", "Sync", white, black, green, black
3824+ indicator = { resetLockOn }, "Reset Lock OFF","Reset Lock ON", red, black, green, black
3825+ indicator = { bootloaderCaps > 0 }, "Std. Boot", "Custom Boot", white, black, white, black
3826+ indicator = { nitrousOn }, "Nitrous Off", "Nitrous On", white, black, red, black
3827+
3828+;-------------------------------------------------------------------------------
3829+
3830+[OutputChannels]
3831+ ; The number of bytes MegaTune or TunerStudio should expect as a result
3832+ ; of sending the "A" command to Speeduino is determined
3833+ ; by the value of ochBlockSize, so be very careful when
3834+ ; you change it.
3835+
3836+ ochGetCommand = "r\$tsCanId\x30%2o%2c"
3837+;[PJSC] ochBlockSize = 90
3838+ ochBlockSize = 112 ;[PJSC v1.01] Extend block size for Test mode
3839+
3840+ secl = scalar, U08, 0, "sec", 1.000, 0.000
3841+ status1 = scalar, U08, 1, "bits", 1.000, 0.000
3842+ inj1Status = bits, U08, 1, [0:0]
3843+ inj2Status = bits, U08, 1, [1:1]
3844+ inj3Status = bits, U08, 1, [2:2]
3845+ inj4Status = bits, U08, 1, [3:3]
3846+ DFCOOn = bits, U08, 1, [4:4]
3847+ boostCutFuel = bits, U08, 1, [5:5]
3848+ toothLog1Ready = bits, U08, 1, [6:6]
3849+ toothLog2Ready = bits, U08, 1, [7:7]
3850+ engine = scalar, U08, 2, "bits", 1.000, 0.000
3851+ running = bits, U08, 2, [0:0]
3852+ crank = bits, U08, 2, [1:1]
3853+ ase = bits, U08, 2, [2:2]
3854+ warmup = bits, U08, 2, [3:3]
3855+ tpsaccaen = bits, U08, 2, [4:4]
3856+ tpsaccden = bits, U08, 2, [5:5]
3857+ mapaccaen = bits, U08, 2, [6:6]
3858+ mapaccden = bits, U08, 2, [7:7]
3859+ dwell = scalar, U08, 3, "ms", 0.100, 0.000
3860+ map = scalar, U16, 4, "kpa", 1.000, 0.000
3861+ iatRaw = scalar, U08, 6, "°C", 1.000, 0.000
3862+ coolantRaw = scalar, U08, 7, "°C", 1.000, 0.000
3863+ batCorrection = scalar, U08, 8, "%", 1.000, 0.000
3864+ batteryVoltage = scalar, U08, 9, "V", 0.100, 0.000
3865+ afr = scalar, U08, 10, "O2", 0.100, 0.000
3866+ egoCorrection = scalar, U08, 11, "%", 1.000, 0.000
3867+ airCorrection = scalar, U08, 12, "%", 1.000, 0.000
3868+ warmupEnrich = scalar, U08, 13, "%", 1.000, 0.000
3869+ rpm = scalar, U16, 14, "rpm", 1.000, 0.000
3870+ accelEnrich = scalar, U08, 16, "%", 2.000, 0.000
3871+ gammaEnrich = scalar, U08, 17, "%", 1.000, 0.000
3872+ veCurr = scalar, U08, 18, "%", 1.000, 0.000
3873+ afrTarget = scalar, U08, 19, "O2", 0.100, 0.000
3874+ pulseWidth = scalar, U16, 20, "ms", 0.001, 0.000
3875+ TPSdot = scalar, U08, 22, "%/s", 10.00, 0.000
3876+ advance = scalar, S08, 23, "deg", 1.000, 0.000
3877+ tps = scalar, U08, 24, "%", 1.000, 0.000
3878+ loopsPerSecond = scalar, U16, 25, "loops", 1.000, 0.000
3879+ freeRAM = scalar, U16, 27, "bytes", 1.000, 0.000
3880+ boostTarget = scalar, U08, 29, "kPa", 2.000, 0.000
3881+ boostDuty = scalar, U08, 30, "%", 1.000, 0.000
3882+ status2 = scalar, U08, 31, "bits", 1.000, 0.000
3883+ launchHard = bits, U08, 31, [0:0]
3884+ launchSoft = bits, U08, 31, [1:1]
3885+ hardLimitOn = bits, U08, 31, [2:2]
3886+ softlimitOn = bits, U08, 31, [3:3]
3887+ boostCutSpark = bits, U08, 31, [4:4]
3888+ error = bits, U08, 31, [5:5]
3889+ idleControlOn = bits, U08, 31, [6:6]
3890+ sync = bits, U08, 31, [7:7]
3891+ rpmDOT = scalar, S16, 32, "rpm/s", 1.000, 0.000
3892+ flex = scalar, U08, 34, "%", 1.000, 0.000
3893+ flexFuelCor = scalar, U08, 35, "%", 1.000, 0.000
3894+ flexIgnCor = scalar, U08, 36, "deg", 1.000, 0.000
3895+
3896+ idleLoad = scalar, U08, 37, { bitStringValue( idleUnits , iacAlgorithm ) }, 2.000, 0.000 ; This is a combined variable covering both PWM and stepper IACs. The units used depend on which idle algorithm is chosen
3897+ testoutputs = scalar, U08, 38, "bits", 1.000, 0.000
3898+ testenabled = bits, U08, 38, [0:0]
3899+ testactive = bits, U08, 38, [1:1]
3900+;[PJSC v1.01] afr2 = scalar, U08, 39, "O2", 0.100, 0.000
3901+;[PJSC v1.01] baro = scalar, U08, 40, "kpa", 1.000, 0.000
3902+ baro = scalar, U16, 39, "kpa", 1.000, 0.000 ;[PJSC v1.01]
3903+ auxin_gauge0 = scalar, U16, 41, "", 1.000, 0.000
3904+ auxin_gauge1 = scalar, U16, 43, "", 1.000, 0.000
3905+ auxin_gauge2 = scalar, U16, 45, "", 1.000, 0.000
3906+ auxin_gauge3 = scalar, U16, 47, "", 1.000, 0.000
3907+ auxin_gauge4 = scalar, U16, 49, "", 1.000, 0.000
3908+ auxin_gauge5 = scalar, U16, 51, "", 1.000, 0.000
3909+ auxin_gauge6 = scalar, U16, 53, "", 1.000, 0.000
3910+ auxin_gauge7 = scalar, U16, 55, "", 1.000, 0.000
3911+ auxin_gauge8 = scalar, U16, 57, "", 1.000, 0.000
3912+ auxin_gauge9 = scalar, U16, 59, "", 1.000, 0.000
3913+ auxin_gauge10 = scalar, U16, 61, "", 1.000, 0.000
3914+ auxin_gauge11 = scalar, U16, 63, "", 1.000, 0.000
3915+ auxin_gauge12 = scalar, U16, 65, "", 1.000, 0.000
3916+ auxin_gauge13 = scalar, U16, 67, "", 1.000, 0.000
3917+ auxin_gauge14 = scalar, U16, 69, "", 1.000, 0.000
3918+ auxin_gauge15 = scalar, U16, 71, "", 1.000, 0.000
3919+ tpsADC = scalar, U08, 73, "ADC",1.000, 0.000
3920+ errors = scalar, U08, 74, "bits", 1.000, 0.000
3921+ errorNum = bits, U08, 74, [0:1]
3922+ currentError = bits, U08, 74, [2:7]
3923+ pulseWidth2 = scalar, U16, 75, "ms", 0.001, 0.000
3924+ pulseWidth3 = scalar, U16, 77, "ms", 0.001, 0.000
3925+ pulseWidth4 = scalar, U16, 79, "ms", 0.001, 0.000
3926+ status3 = scalar, U08, 81, "bits", 1.000, 0.000
3927+ resetLockOn = bits, U08, 81, [0:0]
3928+ nitrousOn = bits, U08, 81, [1:1]
3929+ unused81_2-4 = bits, U08, 81, [2:4]
3930+ nSquirts = bits, U08, 81, [5:7]
3931+ flexBoostCor = scalar, S16, 82, "kPa", 1.000, 0.000
3932+ nChannels = scalar, U08, 84, "bits", 1.000, 0.000
3933+ nIgnChannels = bits, U08, 84, [0:3]
3934+ nFuelChannels = bits, U08, 84, [4:7]
3935+ fuelLoad = scalar, S16, 85, { bitStringValue( algorithmUnits , algorithm ) }, 1.000, 0.000
3936+ ignLoad = scalar, S16, 87, { bitStringValue( algorithmUnits , ignAlgorithm ) }, 1.000, 0.000
3937+ syncLossCounter = scalar, U08, 89, "", 1.000, 0.000
3938+ veCurr2 = scalar, U08, 90, "%", 1.000, 0.000 ;[PJSC]Multi VE Map support
3939+ veCurr3 = scalar, U08, 91, "%", 1.000, 0.000 ;[PJSC]Multi VE Map support
3940+ veCurr4 = scalar, U08, 92, "%", 1.000, 0.000 ;[PJSC]Multi VE Map support
3941+ valvePosition = scalar, U08, 93, "%", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3942+ valvePositionADC = scalar, U08, 94, "ADC", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3943+ sparkedAngle = scalar, S16, 95, "deg", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3944+ dutyFreq = scalar, U16, 97, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3945+ dutyRatio = scalar, U16, 99, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3946+ dutyFreq2 = scalar, U16, 101, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3947+ dutyRatio2 = scalar, U16, 103, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3948+ testCnt = scalar, U16, 105, "", 1.000, 0.000 ;[PJSC v1.01]For test mode
3949+ afr2 = scalar, U08, 107, "O2", 0.100, 0.000 ;[PJSC v1.01]
3950+ fuelLoad2 = scalar, S16, 108, { bitStringValue( algorithmUnits2 , algorithm2 ) }, 1.000, 0.000 ;[PJSC v1.01]For dual fuel load
3951+ fuelLoad3 = scalar, S16, 110, { bitStringValue( algorithmUnits2 , algorithm3 ) }, 1.000, 0.000 ;[PJSC v1.01]For dual fuel load
3952+
3953+
3954+#if CELSIUS
3955+ coolant = { coolantRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
3956+ iat = { iatRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
3957+#else
3958+ coolant = { (coolantRaw - 40) * 1.8 + 32 } ;Convert C to F (Offset by 40)
3959+ iat = { (iatRaw - 40) * 1.8 + 32 } ;Convert C to F (Offset by 40)
3960+#endif
3961+ time = { timeNow }
3962+ seconds = { secl }
3963+
3964+ throttle = { tps }, "%"
3965+
3966+ cycleTime = { rpm ? ( 60000.0 / rpm ) : 0 }
3967+ cycleMultiplier = { injLayout == 3 ? 2 : 1 }
3968+ strokeMultipler = { twoStroke == 1 ? 2 : 1 }
3969+ dutyCycle = { rpm ? ( 100.0*pulseWidth/(cycleTime * cycleMultiplier) * strokeMultipler ) : 0 }
3970+ stgDutyCycle = { rpm && stagingEnabled ? ( 100.0*pulseWidth3/(cycleTime * cycleMultiplier) * strokeMultipler ) : 0 }
3971+
3972+ boostCutOut = { boostCutFuel || boostCutSpark }
3973+ lambda = { afr / stoich }
3974+ MAPxRPM = { rpm * map }
3975+ loopsPerRev = { loopsPerSecond / (rpm / 60) }
3976+ req_fuel = { reqFuel }
3977+ inj_open = { injOpen }
3978+ ase_enrich = { ase ? (100 + asePct ) : 100 } ; If ASE is active then equal the ASE + 100
3979+ map_multiply_amt = { multiplyMAP ? map : 100 } ; If multiply MAP is enabled, use the current MAP value, otherwise 100%
3980+ ;nSquirts = { nCylinders / divider }
3981+
3982+ ;Manifold pressure in weirdo units
3983+ map_bar = { (map - baro) / 101.33 }
3984+ map_psi = { (map - baro) * 0.145038 }
3985+ map_inhg = { (baro - map) * 0.2953007 } ;in-Hg
3986+ map_vacboost = { map < baro ? -map_inhg : map_psi }
3987+
3988+ ;fuelLoadMax = { arrayValue(algorithmLimits , algorithm) } ;Doesn't work, no idea why.
3989+;[PJSC vv1.01] fuelLoadMax = { (algorithm == 0 || algorithm == 2) ? 511 : 100 }
3990+;[PJSC vv1.01] ignLoadMax = { (ignAlgorithm == 0 || ignAlgorithm == 2) ? 511 : 100 }
3991+ fuelLoadMax = { (algorithm == 0 || algorithm == 2) ? 255 : 100 }
3992+ ignLoadMax = { (ignAlgorithm == 0 || ignAlgorithm == 2) ? 255 : 100 }
3993+
3994+ boostTableLimit = { boostType == 0 ? 100 : 511 } ;The maximum value allowed in the boost table. 100 is used for duty cycle, 511 for kpa
3995+
3996+;-------------------------------------------------------------------------------
3997+
3998+[Datalog]
3999+ ; Full datalog.
4000+ ;
4001+ ; Default user-defined log emulates the full datalog.
4002+ ;
4003+ ; The entries are saved in the datalog file in the order in
4004+ ; which they appear in the list below.
4005+ ;
4006+ ; Channel - Case sensitive name of output channel to be logged.
4007+ ; Label - String written to header line of log. Be careful
4008+ ; about changing these, as programs like MSLVV and
4009+ ; MSTweak key off specific column names.
4010+ ; Type - Data type of output, converted before writing.
4011+ ; Format - C-style output format of data.
4012+ ;
4013+ ; Channel Label Type Format
4014+ ; -------------- ---------- ----- ------
4015+ entry = time, "Time", float, "%.3f"
4016+ entry = secl, "SecL", int, "%d"
4017+ entry = rpm, "RPM", int, "%d"
4018+ entry = map, "MAP", int, "%d"
4019+ entry = MAPxRPM, "MAPxRPM", int, "%d"
4020+ entry = tps, "TPS", int, "%d"
4021+ entry = afr, "O2", float, "%.3f"
4022+ entry = lambda, "Lambda", float, "%.3f"
4023+ entry = iat, "IAT", int, "%d"
4024+ entry = coolant, "CLT", int, "%d"
4025+ entry = engine, "Engine", int, "%d"
4026+ entry = DFCOOn, "DFCO", int, "%d"
4027+ entry = egoCorrection, "Gego", int, "%d"
4028+ entry = airCorrection, "Gair", int, "%d"
4029+ entry = batCorrection, "Gbattery", int, "%d"
4030+ entry = warmupEnrich, "Gwarm", int, "%d"
4031+ ;entry = baroCorrection, "Gbaro", int, "%d"
4032+ entry = gammaEnrich, "Gammae", int, "%d"
4033+ entry = accelEnrich, "Accel Enrich", int, "%d"
4034+ entry = veCurr, "VE", int, "%d"
4035+ entry = veCurr2, "VE2", int, "%d", { multiVEmapEnabled } ;[PJSC]
4036+ entry = veCurr3, "VE3", int, "%d", { multiVEmapEnabled } ;[PJSC v1.01]
4037+ entry = veCurr4, "VE4", int, "%d", { multiVEmapEnabled } ;[PJSC v1.01]
4038+ entry = pulseWidth, "PW", float, "%.1f"
4039+ entry = afrTarget, "AFR Target", float, "%.3f"
4040+ entry = pulseWidth, "PW2", float, "%.1f"
4041+ entry = dutyCycle, "DutyCycle1", float, "%.1f"
4042+ entry = dutyCycle, "DutyCycle2", float, "%.1f"
4043+ entry = TPSdot, "TPS DOT", int, "%d"
4044+ entry = advance, "Advance", int, "%d"
4045+ entry = dwell, "Dwell", float, "%.1f"
4046+ entry = batteryVoltage, "Battery V", float, "%.1f"
4047+ entry = rpmDOT, "rpm/s", int, "%d"
4048+ entry = flex, "Eth %", int, "%d", { flexEnabled }
4049+ entry = errorNum, "Error #", int, "%d"
4050+ entry = currentError, "Error ID", int, "%d"
4051+ entry = map_psi, "Boost PSI", float, "%.1f"
4052+ entry = boostTarget, "Boost Target", int, "%d", { boostEnabled }
4053+ entry = boostDuty, "Boost Duty", int, "%d", { boostEnabled }
4054+ entry = boostCutOut , "Boost cut", int, "%d"
4055+ entry = launchHard , "Launch Hard", int, "%d"
4056+ entry = hardLimitOn , "Hard Limiter", int, "%d"
4057+ entry = idleLoad, "IAC value", int, "%d"
4058+ entry = baro, "Baro Pressure",int, "%d"
4059+ entry = nitrousOn, "Nitrous On", int, "%d", { n2o_enable > 0 }
4060+ entry = syncLossCounter, "Sync Loss #", int, "%d"
4061+ entry = valvePosition, "ExValve Pos", int, "%d", { exValveCaptureEnabled } ;[PJSC]
4062+ entry = sparkedAngle, "Spark Angle", int, "%d", { exTrigModeSelect == 1 } ;[PJSC]
4063+ entry = dutyFreq, "Duty Frequency", int, "%d", { dutyPulseCaptureEnabled } ;[PJSC]
4064+ entry = dutyRatio, "Duty Ratio", int, "%d", { dutyPulseCaptureEnabled } ;[PJSC]
4065+ entry = dutyFreq2, "Duty Frequency2", int, "%d", { dutyPulseCaptureEnabled2 } ;[PJSC]
4066+ entry = dutyRatio2, "Duty Ratio2", int, "%d", { dutyPulseCaptureEnabled2 } ;[PJSC]
4067+
4068+ entry = auxin_gauge0, "AuxIn CH0", int, "%d"
4069+ entry = auxin_gauge1, "AuxIn CH1", int, "%d"
4070+ entry = auxin_gauge2, "AuxIn CH2", int, "%d"
4071+ entry = auxin_gauge3, "AuxIn CH3", int, "%d"
4072+ entry = auxin_gauge4, "AuxIn CH4", int, "%d"
4073+ entry = auxin_gauge5, "AuxIn CH5", int, "%d"
4074+ entry = auxin_gauge6, "AuxIn CH6", int, "%d"
4075+ entry = auxin_gauge7, "AuxIn CH7", int, "%d"
4076+
4077+
4078+[LoggerDefinition]
4079+ ; valid logger types: composite, tooth, trigger, csv
4080+
4081+ ;loggerDef = uniqueName, Display Name, type
4082+ loggerDef = tooth, "Tooth Logger", tooth
4083+ ;dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
4084+ startCommand = "H"
4085+ stopCommand = "h"
4086+ dataReadCommand = "T" ; Basic TS command format
4087+ dataReadTimeout = 5000 ; time in ms
4088+ dataReadyCondition = { toothLog1Ready == 1 }
4089+ ;dataLength = 256 ; in bytes, including headers, footers and data (not used)
4090+ ;dataLength = 128 ; in bytes, including headers, footers and data (not used)
4091+
4092+ ;recordDef = headerLen. footerLen, recordLen
4093+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
4094+
4095+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
4096+ recordField = toothTime, "ToothTime", 0, 32, 1.0, "uS"
4097+
4098+ loggerDef = compositeLogger, "Composite Logger", composite
4099+ startCommand = "J"
4100+ stopCommand = "j"
4101+ dataReadCommand = "T" ; Basic TS command format. Note that this is shared with the composite logger. Firmware detects which log is currently running
4102+ dataReadTimeout = 5000 ; time in ms
4103+ dataReadyCondition = { toothLog1Ready == 1 }
4104+ ;dataLength = 256 ; in bytes, including headers, footers and data (not used)
4105+ ;dataLength = 320 ; in bytes, including headers, footers and data (not used)
4106+
4107+ ;recordDef = headerLen. footerLen, recordLen
4108+ recordDef = 0, 0, 5; in bytes, the recordLen is for each record, currently limited to 4 bytes
4109+
4110+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
4111+ recordField = priLevel, "PriLevel", 0, 1, 1.0, "Flag"
4112+ recordField = secLevel, "SecLevel", 1, 1, 1.0, "Flag"
4113+ recordField = trigger, "Trigger", 2, 1, 1.0, "Flag"
4114+ recordField = sync, "Sync", 3, 1, 1.0, "Flag"
4115+ recordField = refTime, "RefTime", 8, 32, 0.001, "ms"
4116+
4117+ ; hidden calcField serves as intermediate variable
4118+ calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }
4119+
4120+ calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) }
4121+ ;recordField = time, "Time", 24, 16, 1.0, "ms"
4122+ calcField = time, "Time", "ms", { refTime }
4123+
4124+
4125+[Tools]
4126+ ;addTool = toolName, PanelName
4127+ addTool = veTableGenerator, "VE Table Generator", veTable1Tbl
4128+ addTool = veTableGenerator, "VE Table Generator", veTable2Tbl ;[PJSC v1.01]
4129+ addTool = veTableGenerator, "VE Table Generator", veTable3Tbl ;[PJSC v1.01]
4130+ addTool = afrTableGenerator, "AFR Table Generator", afrTable1Tbl
4131+
4132+
4133+[VeAnalyze]
4134+ ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
4135+ veAnalyzeMap = veTable1Tbl, afrTable1Tbl, afr, egoCorrection
4136+ lambdaTargetTables = afrTable1Tbl, afrTSCustom,
4137+ filter = std_xAxisMin ; Auto build with appropriate axis channels
4138+ ;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
4139+ filter = std_xAxisMax ; Auto build with appropriate axis channels
4140+ filter = std_yAxisMin ; Auto build with appropriate axis channels
4141+ filter = std_yAxisMax ; Auto build with appropriate axis channels
4142+ filter = std_DeadLambda ; Auto build
4143+
4144+#if CELSIUS
4145+ filter = minCltFilter, "Minimum CLT", coolant, < , 71, , true
4146+#else
4147+ filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
4148+#endif
4149+ filter = accelFilter, "Accel Flag" , engine, & , 16, , false
4150+ filter = aseFilter, "ASE Flag" , engine, & , 4, , false
4151+ filter = overrunFilter, "Overrun" , pulseWidth, = , 0, , false
4152+ filter = std_Custom ; Standard Custom Expression Filter.
4153+
4154+;------------- WUE VEAL not currently working ----------------
4155+;[WueAnalyze]
4156+ ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
4157+ ; wueAnalyzeMap = veTable1Tbl, afrTable1Tbl, afr, egoCorrection
4158+; wueAnalyzeMap = afrTable1Tbl, warmup_afr_curve, warmup_curve, afr, coolant, warmupEnrich ;warmup_afr_curve,
4159+; lambdaTargetTables = afrTable1Tbl, afrTSCustom,
4160+ ;filter = std_xAxisMin ; Auto build with appropriate axis channels
4161+ ;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
4162+ ;filter = std_xAxisMax ; Auto build with appropriate axis channels
4163+ ;filter = std_yAxisMin ; Auto build with appropriate axis channels
4164+ ;filter = std_yAxisMax ; Auto build with appropriate axis channels
4165+ ;filter = std_DeadLambda ; Auto build
4166+
4167+; filter = maxTPSFilter, "High Throttle", tps, < , 15, , true
4168+;------------- WUE VEAL not currently working ----------------
4169+
4170+;[PJSC v1.01]------------------------------------------------------------------------
4171+; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
4172+ veAnalyzeMap = veTable2Tbl, afrTable1Tbl, afr, egoCorrection
4173+ lambdaTargetTables = afrTable1Tbl, afrTSCustom,
4174+ filter = std_xAxisMin ; Auto build with appropriate axis channels
4175+ ;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
4176+ filter = std_xAxisMax ; Auto build with appropriate axis channels
4177+ filter = std_yAxisMin ; Auto build with appropriate axis channels
4178+ filter = std_yAxisMax ; Auto build with appropriate axis channels
4179+ filter = std_DeadLambda ; Auto build
4180+
4181+#if CELSIUS
4182+ filter = minCltFilter, "Minimum CLT", coolant, < , 71, , true
4183+#else
4184+ filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
4185+#endif
4186+ filter = accelFilter, "Accel Flag" , engine, & , 16, , false
4187+ filter = aseFilter, "ASE Flag" , engine, & , 4, , false
4188+ filter = overrunFilter, "Overrun" , pulseWidth, = , 0, , false
4189+ filter = std_Custom ; Standard Custom Expression Filter.
4190+
4191+; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
4192+ veAnalyzeMap = veTable3Tbl, afrTable1Tbl, afr, egoCorrection
4193+ lambdaTargetTables = afrTable1Tbl, afrTSCustom,
4194+ filter = std_xAxisMin ; Auto build with appropriate axis channels
4195+ ;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
4196+ filter = std_xAxisMax ; Auto build with appropriate axis channels
4197+ filter = std_yAxisMin ; Auto build with appropriate axis channels
4198+ filter = std_yAxisMax ; Auto build with appropriate axis channels
4199+ filter = std_DeadLambda ; Auto build
4200+
4201+#if CELSIUS
4202+ filter = minCltFilter, "Minimum CLT", coolant, < , 71, , true
4203+#else
4204+ filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
4205+#endif
4206+ filter = accelFilter, "Accel Flag" , engine, & , 16, , false
4207+ filter = aseFilter, "ASE Flag" , engine, & , 4, , false
4208+ filter = overrunFilter, "Overrun" , pulseWidth, = , 0, , false
4209+ filter = std_Custom ; Standard Custom Expression Filter.
4210+
4211+#if table4_fuel
4212+; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
4213+ veAnalyzeMap = sparkTbl, afrTable1Tbl, afr, egoCorrection
4214+ lambdaTargetTables = afrTable1Tbl, afrTSCustom,
4215+ filter = std_xAxisMin ; Auto build with appropriate axis channels
4216+ ;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
4217+ filter = std_xAxisMax ; Auto build with appropriate axis channels
4218+ filter = std_yAxisMin ; Auto build with appropriate axis channels
4219+ filter = std_yAxisMax ; Auto build with appropriate axis channels
4220+ filter = std_DeadLambda ; Auto build
4221+
4222+ #if CELSIUS
4223+ filter = minCltFilter, "Minimum CLT", coolant, < , 71, , true
4224+ #else
4225+ filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
4226+ #endif
4227+ filter = accelFilter, "Accel Flag" , engine, & , 16, , false
4228+ filter = aseFilter, "ASE Flag" , engine, & , 4, , false
4229+ filter = overrunFilter, "Overrun" , pulseWidth, = , 0, , false
4230+ filter = std_Custom ; Standard Custom Expression Filter.
4231+#endif
4232+;[PJSC v1.01]-------------------------------------------------------------------------
--- branches/Ver1.02/speeduino/decoders.h (nonexistent)
+++ branches/Ver1.02/speeduino/decoders.h (revision 89)
@@ -0,0 +1,228 @@
1+#ifndef DECODERS_H
2+#define DECODERS_H
3+
4+#if defined(CORE_AVR)
5+ #define READ_PRI_TRIGGER() ((*triggerPri_pin_port & triggerPri_pin_mask) ? true : false)
6+ #define READ_SEC_TRIGGER() ((*triggerSec_pin_port & triggerSec_pin_mask) ? true : false)
7+#else
8+ #define READ_PRI_TRIGGER() digitalRead(pinTrigger)
9+ #define READ_SEC_TRIGGER() digitalRead(pinTrigger2)
10+#endif
11+
12+static inline void addToothLogEntry(unsigned long, bool);
13+void loggerPrimaryISR();
14+void loggerSecondaryISR();
15+static inline uint16_t stdGetRPM(uint16_t);
16+static inline void setFilter(unsigned long);
17+static inline int crankingGetRPM(byte);
18+//static inline void doPerToothTiming(uint16_t);
19+
20+void (*triggerHandler)(); //Pointer for the trigger function (Gets pointed to the relevant decoder)
21+void (*triggerSecondaryHandler)(); //Pointer for the secondary trigger function (Gets pointed to the relevant decoder)
22+uint16_t (*getRPM)(); //Pointer to the getRPM function (Gets pointed to the relevant decoder)
23+int (*getCrankAngle)(); //Pointer to the getCrank Angle function (Gets pointed to the relevant decoder)
24+void (*triggerSetEndTeeth)(); //Pointer to the triggerSetEndTeeth function of each decoder
25+
26+//All of the below are the 6 required functions for each decoder / pattern
27+void triggerSetup_missingTooth();
28+void triggerPri_missingTooth();
29+void triggerSec_missingTooth();
30+uint16_t getRPM_missingTooth();
31+int getCrankAngle_missingTooth();
32+void triggerSetEndTeeth_missingTooth();
33+
34+void triggerSetup_DualWheel();
35+void triggerPri_DualWheel();
36+void triggerSec_DualWheel();
37+uint16_t getRPM_DualWheel();
38+int getCrankAngle_DualWheel();
39+void triggerSetEndTeeth_DualWheel();
40+
41+void triggerSetup_BasicDistributor();
42+void triggerPri_BasicDistributor();
43+void triggerSec_BasicDistributor();
44+uint16_t getRPM_BasicDistributor();
45+int getCrankAngle_BasicDistributor();
46+void triggerSetEndTeeth_BasicDistributor();
47+
48+void triggerSetup_GM7X();
49+void triggerPri_GM7X();
50+void triggerSec_GM7X();
51+uint16_t getRPM_GM7X();
52+int getCrankAngle_GM7X();
53+void triggerSetEndTeeth_GM7X();
54+
55+void triggerSetup_4G63();
56+void triggerPri_4G63();
57+void triggerSec_4G63();
58+uint16_t getRPM_4G63();
59+int getCrankAngle_4G63();
60+void triggerSetEndTeeth_4G63();
61+
62+void triggerSetup_24X();
63+void triggerPri_24X();
64+void triggerSec_24X();
65+uint16_t getRPM_24X();
66+int getCrankAngle_24X();
67+void triggerSetEndTeeth_24X();
68+
69+void triggerSetup_Jeep2000();
70+void triggerPri_Jeep2000();
71+void triggerSec_Jeep2000();
72+uint16_t getRPM_Jeep2000();
73+int getCrankAngle_Jeep2000();
74+void triggerSetEndTeeth_Jeep2000();
75+
76+void triggerSetup_Audi135();
77+void triggerPri_Audi135();
78+void triggerSec_Audi135();
79+uint16_t getRPM_Audi135();
80+int getCrankAngle_Audi135();
81+void triggerSetEndTeeth_Audi135();
82+
83+void triggerSetup_HondaD17();
84+void triggerPri_HondaD17();
85+void triggerSec_HondaD17();
86+uint16_t getRPM_HondaD17();
87+int getCrankAngle_HondaD17();
88+void triggerSetEndTeeth_HondaD17();
89+
90+void triggerSetup_Miata9905();
91+void triggerPri_Miata9905();
92+void triggerSec_Miata9905();
93+uint16_t getRPM_Miata9905();
94+int getCrankAngle_Miata9905();
95+void triggerSetEndTeeth_Miata9905();
96+
97+void triggerSetup_MazdaAU();
98+void triggerPri_MazdaAU();
99+void triggerSec_MazdaAU();
100+uint16_t getRPM_MazdaAU();
101+int getCrankAngle_MazdaAU();
102+void triggerSetEndTeeth_MazdaAU();
103+
104+void triggerSetup_non360();
105+void triggerPri_non360();
106+void triggerSec_non360();
107+uint16_t getRPM_non360();
108+int getCrankAngle_non360();
109+void triggerSetEndTeeth_non360();
110+
111+void triggerSetup_Nissan360();
112+void triggerPri_Nissan360();
113+void triggerSec_Nissan360();
114+uint16_t getRPM_Nissan360();
115+int getCrankAngle_Nissan360();
116+void triggerSetEndTeeth_Nissan360();
117+
118+void triggerSetup_Subaru67();
119+void triggerPri_Subaru67();
120+void triggerSec_Subaru67();
121+uint16_t getRPM_Subaru67();
122+int getCrankAngle_Subaru67();
123+void triggerSetEndTeeth_Subaru67();
124+
125+void triggerSetup_Daihatsu();
126+void triggerPri_Daihatsu();
127+void triggerSec_Daihatsu();
128+uint16_t getRPM_Daihatsu();
129+int getCrankAngle_Daihatsu();
130+void triggerSetEndTeeth_Daihatsu();
131+
132+void triggerSetup_Harley();
133+void triggerPri_Harley();
134+void triggerSec_Harley();
135+uint16_t getRPM_Harley();
136+int getCrankAngle_Harley();
137+void triggerSetEndTeeth_Harley();
138+
139+void triggerSetup_ThirtySixMinus222();
140+void triggerPri_ThirtySixMinus222();
141+void triggerSec_ThirtySixMinus222();
142+uint16_t getRPM_ThirtySixMinus222();
143+int getCrankAngle_ThirtySixMinus222();
144+void triggerSetEndTeeth_ThirtySixMinus222();
145+
146+void triggerSetup_NSR(); //[PJSC ver1.02] For supporting NSR trigger
147+void triggerPri_NSR(); //[PJSC ver1.02] For supporting NSR trigger
148+void triggerSec_NSR(); //[PJSC ver1.02] For supporting NSR trigger
149+uint16_t getRPM_NSR(); //[PJSC ver1.02] For supporting NSR trigger
150+int getCrankAngle_NSR(); //[PJSC ver1.02] For supporting NSR trigger
151+void triggerSetEndTeeth_NSR(); //[PJSC ver1.02] For supporting NSR trigger
152+
153+void triggerSetup_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
154+void triggerPri_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
155+void triggerSec_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
156+uint16_t getRPM_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
157+int getCrankAngle_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
158+void triggerSetEndTeeth_KATANA(); //[PJSC ver1.02] For supporting KATANA trigger
159+
160+void captureExtTrigger(); //[PJSC] For External Trigger
161+void captureDutyPulseONtime(); //[PJSC] For capturing duty pulse
162+void captureDutyPulseOFFtime(); //[PJSC] For capturing duty pulse
163+void captureDutyPulseONtime2(); //[PJSC] For capturing duty pulse
164+void captureDutyPulseOFFtime2(); //[PJSC] For capturing duty pulse
165+
166+unsigned long MAX_STALL_TIME = 500000UL; //The maximum time (in uS) that the system will continue to function before the engine is considered stalled/stopped. This is unique to each decoder, depending on the number of teeth etc. 500000 (half a second) is used as the default value, most decoders will be much less.
167+
168+volatile unsigned long curTime;
169+volatile unsigned long curGap;
170+volatile unsigned long curTime2;
171+volatile unsigned long curGap2;
172+volatile unsigned long lastGap;
173+volatile unsigned long targetGap;
174+volatile unsigned long compositeLastToothTime;
175+
176+volatile int toothCurrentCount = 0; //The current number of teeth (Onec sync has been achieved, this can never actually be 0
177+volatile byte toothSystemCount = 0; //Used for decoders such as Audi 135 where not every tooth is used for calculating crank angle. This variable stores the actual number of teeth, not the number being used to calculate crank angle
178+volatile unsigned long toothSystemLastToothTime = 0; //As below, but used for decoders where not every tooth count is used for calculation
179+volatile unsigned long toothLastToothTime = 0; //The time (micros()) that the last tooth was registered
180+volatile unsigned long toothLastSecToothTime = 0; //The time (micros()) that the last tooth was registered on the secondary input
181+volatile unsigned long toothLastMinusOneToothTime = 0; //The time (micros()) that the tooth before the last tooth was registered
182+#ifndef SMALL_FLASH_MODE
183+volatile unsigned long toothLastMinusOneSecToothTime = 0; //The time (micros()) that the tooth before the last tooth was registered on secondary input
184+volatile unsigned long targetGap2;
185+#endif
186+volatile unsigned long toothOneTime = 0; //The time (micros()) that tooth 1 last triggered
187+volatile unsigned long toothOneMinusOneTime = 0; //The 2nd to last time (micros()) that tooth 1 last triggered
188+volatile bool revolutionOne = 0; // For sequential operation, this tracks whether the current revolution is 1 or 2 (not 1)
189+
190+volatile unsigned int secondaryToothCount; //Used for identifying the current secondary (Usually cam) tooth for patterns with multiple secondary teeth
191+volatile unsigned long secondaryLastToothTime = 0; //The time (micros()) that the last tooth was registered (Cam input)
192+volatile unsigned long secondaryLastToothTime1 = 0; //The time (micros()) that the last tooth was registered (Cam input)
193+
194+volatile int triggerActualTeeth;
195+volatile unsigned long triggerFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering)
196+volatile unsigned long triggerSecFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) for the secondary input
197+volatile bool validTrigger; //Is set true when the last trigger (Primary or secondary) was valid (ie passed filters)
198+unsigned int triggerSecFilterTime_duration; // The shortest valid time (in uS) pulse DURATION
199+volatile uint16_t triggerToothAngle; //The number of crank degrees that elapse per tooth
200+volatile bool triggerToothAngleIsCorrect = false; //Whether or not the triggerToothAngle variable is currently accurate. Some patterns have times when the triggerToothAngle variable cannot be accurately set.
201+bool secondDerivEnabled = false; //The use of the 2nd derivative calculation is limited to certain decoders. This is set to either true or false in each decoders setup routine
202+bool decoderIsSequential; //Whether or not the decoder supports sequential operation
203+bool decoderIsLowRes = false; //Is set true, certain extra calculations are performed for better timing accuracy
204+bool decoderHasSecondary = false; //Whether or not the pattern uses a secondary input
205+bool decoderHasFixedCrankingTiming = false; //Whether or not the decoder supports fixed cranking timing
206+byte checkSyncToothCount; //How many teeth must've been seen on this revolution before we try to confirm sync (Useful for missing tooth type decoders)
207+unsigned long elapsedTime;
208+unsigned long lastCrankAngleCalc;
209+int16_t lastToothCalcAdvance = 99; //Invalid value here forces calculation of this on first main loop
210+
211+int16_t ignition1EndTooth = 0;
212+int16_t ignition2EndTooth = 0;
213+int16_t ignition3EndTooth = 0;
214+int16_t ignition4EndTooth = 0;
215+
216+int16_t toothAngles[24]; //An array for storing fixed tooth angles. Currently sized at 24 for the GM 24X decoder, but may grow later if there are other decoders that use this style
217+
218+//Used for identifying long and short pulses on the 4G63 (And possibly other) trigger patterns
219+#define LONG 0;
220+#define SHORT 1;
221+
222+#define CRANK_SPEED 0
223+#define CAM_SPEED 1
224+
225+#define TOOTH_CRANK 0
226+#define TOOTH_CAM 1
227+
228+#endif