rusEFI
The most advanced open source ECU
engine_configuration_generated_structures_alphax-2chan.h
Go to the documentation of this file.
1 // this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
2 // by class com.rusefi.output.CHeaderConsumer
3 // begin
4 #pragma once
5 #include "rusefi_types.h"
6 // start of stft_cell_cfg_s
8  /**
9  * Maximum % that the short term fuel trim can add
10  * units: %
11  * offset 0
12  */
13  int8_t maxAdd;
14  /**
15  * Maximum % that the short term fuel trim can remove
16  * units: %
17  * offset 1
18  */
19  int8_t maxRemove;
20  /**
21  * Time constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.
22  * units: sec
23  * offset 2
24  */
25  scaled_channel<uint16_t, 10, 1> timeConstant;
26 };
27 static_assert(sizeof(stft_cell_cfg_s) == 4);
28 
29 // start of stft_s
30 struct stft_s {
31  /**
32  * Below this RPM, the idle region is active, idle+300 would be a good value
33  * units: RPM
34  * offset 0
35  */
36  scaled_channel<uint8_t, 1, 50> maxIdleRegionRpm;
37  /**
38  * Below this engine load, the overrun region is active
39  * units: load
40  * offset 1
41  */
42  uint8_t maxOverrunLoad;
43  /**
44  * Above this engine load, the power region is active
45  * units: load
46  * offset 2
47  */
48  uint8_t minPowerLoad;
49  /**
50  * When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required.
51  * units: %
52  * offset 3
53  */
54  scaled_channel<uint8_t, 10, 1> deadband;
55  /**
56  * Below this temperature, correction is disabled.
57  * units: C
58  * offset 4
59  */
60  int8_t minClt;
61  /**
62  * Below this AFR, correction is paused
63  * units: afr
64  * offset 5
65  */
66  scaled_channel<uint8_t, 10, 1> minAfr;
67  /**
68  * Above this AFR, correction is paused
69  * units: afr
70  * offset 6
71  */
72  scaled_channel<uint8_t, 10, 1> maxAfr;
73  /**
74  * Delay after starting the engine before beginning closed loop correction.
75  * units: seconds
76  * offset 7
77  */
78  uint8_t startupDelay;
79  /**
80  * offset 8
81  */
82  stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT];
83 };
84 static_assert(sizeof(stft_s) == 24);
85 
86 // start of pid_s
87 struct pid_s {
88  /**
89  * offset 0
90  */
91  float pFactor;
92  /**
93  * offset 4
94  */
95  float iFactor;
96  /**
97  * offset 8
98  */
99  float dFactor;
100  /**
101  * Linear addition to PID logic
102  * offset 12
103  */
104  int16_t offset;
105  /**
106  * PID dTime
107  * units: ms
108  * offset 14
109  */
110  int16_t periodMs;
111  /**
112  * Output Min Duty Cycle
113  * offset 16
114  */
115  int16_t minValue;
116  /**
117  * Output Max Duty Cycle
118  * offset 18
119  */
120  int16_t maxValue;
121 };
122 static_assert(sizeof(pid_s) == 20);
123 
124 // start of MsIoBox_config_s
126  /**
127  * offset 0
128  */
130  /**
131  * offset 1
132  */
134  /**
135  * need 4 byte alignment
136  * units: units
137  * offset 2
138  */
139  uint8_t alignmentFill_at_2[2];
140 };
141 static_assert(sizeof(MsIoBox_config_s) == 4);
142 
143 // start of cranking_parameters_s
145  /**
146  * Base mass of the per-cylinder fuel injected during cranking. This is then modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width.
147  * A reasonable starting point is 60mg per liter per cylinder.
148  * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
149  * units: mg
150  * offset 0
151  */
152  float baseFuel;
153  /**
154  * This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm.
155  * set cranking_rpm X
156  * units: RPM
157  * offset 4
158  */
159  int16_t rpm;
160  /**
161  * need 4 byte alignment
162  * units: units
163  * offset 6
164  */
165  uint8_t alignmentFill_at_6[2];
166 };
167 static_assert(sizeof(cranking_parameters_s) == 8);
168 
169 // start of gppwm_channel
171  /**
172  * Select a pin to use for PWM or on-off output.
173  * offset 0
174  */
176  /**
177  * If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.
178  * This should be a safe value for whatever hardware is connected to prevent damage.
179  * units: %
180  * offset 2
181  */
182  uint8_t dutyIfError;
183  /**
184  * need 4 byte alignment
185  * units: units
186  * offset 3
187  */
188  uint8_t alignmentFill_at_3[1];
189  /**
190  * Select a frequency to run PWM at.
191  * Set this to 0hz to enable on-off mode.
192  * units: hz
193  * offset 4
194  */
195  uint16_t pwmFrequency;
196  /**
197  * Hysteresis: in on-off mode, turn the output on when the table value is above this duty.
198  * units: %
199  * offset 6
200  */
201  uint8_t onAboveDuty;
202  /**
203  * Hysteresis: in on-off mode, turn the output off when the table value is below this duty.
204  * units: %
205  * offset 7
206  */
207  uint8_t offBelowDuty;
208  /**
209  * Selects the Y axis to use for the table.
210  * offset 8
211  */
213  /**
214  * Selects the X axis to use for the table.
215  * offset 9
216  */
218  /**
219  * offset 10
220  */
221  scaled_channel<int16_t, 2, 1> loadBins[GPPWM_LOAD_COUNT];
222  /**
223  * offset 26
224  */
225  int16_t rpmBins[GPPWM_RPM_COUNT];
226  /**
227  * units: duty
228  * offset 42
229  */
230  scaled_channel<uint8_t, 2, 1> table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT];
231  /**
232  * need 4 byte alignment
233  * units: units
234  * offset 106
235  */
237 };
238 static_assert(sizeof(gppwm_channel) == 108);
239 
240 // start of air_pressure_sensor_config_s
242  /**
243  * kPa value at low volts
244  * units: kpa
245  * offset 0
246  */
247  float lowValue;
248  /**
249  * kPa value at high volts
250  * units: kpa
251  * offset 4
252  */
253  float highValue;
254  /**
255  * offset 8
256  */
258  /**
259  * offset 9
260  */
262  /**
263  * need 4 byte alignment
264  * units: units
265  * offset 10
266  */
268 };
269 static_assert(sizeof(air_pressure_sensor_config_s) == 12);
270 
271 // start of MAP_sensor_config_s
273  /**
274  * offset 0
275  */
276  float samplingAngleBins[MAP_ANGLE_SIZE];
277  /**
278  * MAP averaging sampling start crank degree angle
279  * units: deg
280  * offset 32
281  */
282  float samplingAngle[MAP_ANGLE_SIZE];
283  /**
284  * offset 64
285  */
286  float samplingWindowBins[MAP_WINDOW_SIZE];
287  /**
288  * MAP averaging angle crank degree duration
289  * units: deg
290  * offset 96
291  */
292  float samplingWindow[MAP_WINDOW_SIZE];
293  /**
294  * offset 128
295  */
297 };
298 static_assert(sizeof(MAP_sensor_config_s) == 140);
299 
300 /**
301  * @brief Thermistor known values
302 
303 */
304 // start of thermistor_conf_s
306  /**
307  * these values are in Celcius
308  * units: *C
309  * offset 0
310  */
311  float tempC_1;
312  /**
313  * units: *C
314  * offset 4
315  */
316  float tempC_2;
317  /**
318  * units: *C
319  * offset 8
320  */
321  float tempC_3;
322  /**
323  * units: Ohm
324  * offset 12
325  */
327  /**
328  * units: Ohm
329  * offset 16
330  */
332  /**
333  * units: Ohm
334  * offset 20
335  */
337  /**
338  * Pull-up resistor value on your board
339  * units: Ohm
340  * offset 24
341  */
343 };
344 static_assert(sizeof(thermistor_conf_s) == 28);
345 
346 // start of linear_sensor_s
348  /**
349  * offset 0
350  */
352  /**
353  * need 4 byte alignment
354  * units: units
355  * offset 1
356  */
357  uint8_t alignmentFill_at_1[3];
358  /**
359  * units: volts
360  * offset 4
361  */
362  float v1;
363  /**
364  * offset 8
365  */
366  float value1;
367  /**
368  * units: volts
369  * offset 12
370  */
371  float v2;
372  /**
373  * offset 16
374  */
375  float value2;
376 };
377 static_assert(sizeof(linear_sensor_s) == 20);
378 
379 // start of ThermistorConf
381  /**
382  * offset 0
383  */
385  /**
386  * offset 28
387  */
389  /**
390  * need 4 byte alignment
391  * units: units
392  * offset 29
393  */
395 };
396 static_assert(sizeof(ThermistorConf) == 32);
397 
398 // start of injector_s
399 struct injector_s {
400  /**
401  * This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute
402  * By the way, g/s = 0.125997881 * (lb/hr)
403  * g/s = 0.125997881 * (cc/min)/10.5
404  * g/s = 0.0119997981 * cc/min
405  * units: cm3/min
406  * offset 0
407  */
408  float flow;
409  /**
410  * units: volts
411  * offset 4
412  */
413  float battLagCorrBins[VBAT_INJECTOR_CURVE_SIZE];
414  /**
415  * ms delay between injector open and close dead times
416  * units: ms
417  * offset 36
418  */
419  float battLagCorr[VBAT_INJECTOR_CURVE_SIZE];
420 };
421 static_assert(sizeof(injector_s) == 68);
422 
423 // start of trigger_config_s
425  /**
426  * https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers
427  * offset 0
428  */
430  /**
431  * units: number
432  * offset 4
433  */
435  /**
436  * units: number
437  * offset 8
438  */
440 };
441 static_assert(sizeof(trigger_config_s) == 12);
442 
443 // start of afr_sensor_s
444 struct afr_sensor_s {
445  /**
446  * offset 0
447  */
449  /**
450  * offset 1
451  */
453  /**
454  * need 4 byte alignment
455  * units: units
456  * offset 2
457  */
458  uint8_t alignmentFill_at_2[2];
459  /**
460  * units: volts
461  * offset 4
462  */
463  float v1;
464  /**
465  * units: AFR
466  * offset 8
467  */
468  float value1;
469  /**
470  * units: volts
471  * offset 12
472  */
473  float v2;
474  /**
475  * units: AFR
476  * offset 16
477  */
478  float value2;
479 };
480 static_assert(sizeof(afr_sensor_s) == 20);
481 
482 // start of idle_hardware_s
484  /**
485  * units: Hz
486  * offset 0
487  */
489  /**
490  * offset 4
491  */
493  /**
494  * offset 6
495  */
497  /**
498  * offset 8
499  */
501  /**
502  * offset 10
503  */
505  /**
506  * need 4 byte alignment
507  * units: units
508  * offset 11
509  */
511 };
512 static_assert(sizeof(idle_hardware_s) == 12);
513 
514 // start of dc_io
515 struct dc_io {
516  /**
517  * offset 0
518  */
520  /**
521  * offset 2
522  */
524  /**
525  * Acts as EN pin in two-wire mode
526  * offset 4
527  */
529  /**
530  * offset 6
531  */
533 };
534 static_assert(sizeof(dc_io) == 8);
535 
536 // start of vr_threshold_s
538  /**
539  * units: rpm
540  * offset 0
541  */
542  scaled_channel<uint8_t, 1, 50> rpmBins[6];
543  /**
544  * units: volts
545  * offset 6
546  */
547  scaled_channel<uint8_t, 100, 1> values[6];
548  /**
549  * offset 12
550  */
552  /**
553  * need 4 byte alignment
554  * units: units
555  * offset 14
556  */
558 };
559 static_assert(sizeof(vr_threshold_s) == 16);
560 
561 // start of engine_configuration_s
563  /**
564  * http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
565  * set engine_type X
566  * offset 0
567  */
569  /**
570  * offset 2
571  */
573  /**
574  * Disable sensor sniffer above this rpm
575  * units: RPM
576  * offset 4
577  */
579  /**
580  * A secondary Rev limit engaged by the driver to help launch the vehicle faster
581  * units: rpm
582  * offset 6
583  */
584  uint16_t launchRpm;
585  /**
586  * set rpm_hard_limit X
587  * units: rpm
588  * offset 8
589  */
590  uint16_t rpmHardLimit;
591  /**
592  * Engine sniffer would be disabled above this rpm
593  * set engineSnifferRpmThreshold X
594  * units: RPM
595  * offset 10
596  */
598  /**
599  * Disable multispark above this engine speed.
600  * units: rpm
601  * offset 12
602  */
603  scaled_channel<uint8_t, 1, 50> multisparkMaxRpm;
604  /**
605  * Above this RPM, disable AC. Set to 0 to disable check.
606  * units: rpm
607  * offset 13
608  */
609  scaled_channel<uint8_t, 1, 50> maxAcRpm;
610  /**
611  * Above this TPS, disable AC. Set to 0 to disable check.
612  * units: %
613  * offset 14
614  */
615  uint8_t maxAcTps;
616  /**
617  * Above this CLT, disable AC to prevent overheating the engine. Set to 0 to disable check.
618  * units: deg C
619  * offset 15
620  */
621  uint8_t maxAcClt;
622  /**
623  * Just for reference really, not taken into account by any logic at this point
624  * units: CR
625  * offset 16
626  */
628  /**
629  * Voltage when the wastegate is closed.
630  * You probably don't have one of these!
631  * units: mv
632  * offset 20
633  */
635  /**
636  * Voltage when the wastegate is fully open.
637  * You probably don't have one of these!
638  * 1 volt = 1000 units
639  * units: mv
640  * offset 22
641  */
643  /**
644  * Voltage when the idle valve is closed.
645  * You probably don't have one of these!
646  * units: mv
647  * offset 24
648  */
649  uint16_t idlePositionMin;
650  /**
651  * Voltage when the idle valve is open.
652  * You probably don't have one of these!
653  * 1 volt = 1000 units
654  * units: mv
655  * offset 26
656  */
657  uint16_t idlePositionMax;
658  /**
659  * offset 28
660  */
662  /**
663  * offset 30
664  */
666  /**
667  * offset 32
668  */
670  /**
671  * offset 34
672  */
674  /**
675  * Pin that activates the reduction/cut for shifting. Sometimes shared with the Launch Control pin
676  * offset 36
677  */
679  /**
680  * units: %
681  * offset 38
682  */
684  /**
685  * Time required to detect a stuck throttle.
686  * units: sec
687  * offset 39
688  */
689  scaled_channel<uint8_t, 50, 1> etbJamTimeout;
690  /**
691  * offset 40
692  */
694  /**
695  * offset 42
696  */
698  /**
699  * Additional idle % while A/C is active
700  * units: %
701  * offset 43
702  */
704  /**
705  * Value between 0 and 100 used in Manual mode
706  * units: %
707  * offset 44
708  */
710  /**
711  * This parameter sets the latest that the last multispark can occur after the main ignition event. For example, if the ignition timing is 30 degrees BTDC, and this parameter is set to 45, no multispark will ever be fired after 15 degrees ATDC.
712  * units: deg
713  * offset 48
714  */
716  /**
717  * Configures the maximum number of extra sparks to fire (does not include main spark)
718  * units: count
719  * offset 49
720  */
722  /**
723  * units: RPM
724  * offset 50
725  */
727  /**
728  * offset 52
729  */
731  /**
732  * offset 120
733  */
735  /**
736  * Does the vehicle have a turbo or supercharger?
737  offset 188 bit 0 */
738  bool isForcedInduction : 1 {};
739  /**
740  * On some Ford and Toyota vehicles one of the throttle sensors is not linear on the full range, i.e. in the specific range of the positions we effectively have only one sensor.
741  offset 188 bit 1 */
742  bool useFordRedundantTps : 1 {};
743  /**
744  offset 188 bit 2 */
745  bool enableKline : 1 {};
746  /**
747  offset 188 bit 3 */
748  bool overrideTriggerGaps : 1 {};
749  /**
750  * Turn on this fan when AC is on.
751  offset 188 bit 4 */
752  bool enableFan1WithAc : 1 {};
753  /**
754  * Turn on this fan when AC is on.
755  offset 188 bit 5 */
756  bool enableFan2WithAc : 1 {};
757  /**
758  * Inhibit operation of this fan while the engine is not running.
759  offset 188 bit 6 */
761  /**
762  * Inhibit operation of this fan while the engine is not running.
763  offset 188 bit 7 */
765  /**
766  * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
767  offset 188 bit 8 */
768  bool enableTrailingSparks : 1 {};
769  /**
770  * TLE7209 and L6205 use two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode.
771  offset 188 bit 9 */
772  bool etb_use_two_wires : 1 {};
773  /**
774  * Subaru/BMW style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position.
775  offset 188 bit 10 */
776  bool isDoubleSolenoidIdle : 1 {};
777  /**
778  offset 188 bit 11 */
779  bool useEeprom : 1 {};
780  /**
781  * Switch between Industrial and Cic PID implementation
782  offset 188 bit 12 */
783  bool useCicPidForIdle : 1 {};
784  /**
785  offset 188 bit 13 */
787  /**
788  offset 188 bit 14 */
789  bool kickStartCranking : 1 {};
790  /**
791  * This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).
792  offset 188 bit 15 */
794  /**
795  offset 188 bit 16 */
796  bool launchControlEnabled : 1 {};
797  /**
798  * "Detect double trigger edges"
799  offset 188 bit 17 */
801  /**
802  offset 188 bit 18 */
803  bool antiLagEnabled : 1 {};
804  /**
805  * For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table).
806  offset 188 bit 19 */
808  /**
809  * Shall we display real life signal or just the part consumed by trigger decoder.
810  * Applies to both trigger and cam/vvt input.
811  *
812  * enable logic_level_trigger
813  offset 188 bit 20 */
815  /**
816  offset 188 bit 21 */
817  bool useTLE8888_stepper : 1 {};
818  /**
819  offset 188 bit 22 */
821  /**
822  * Print incoming and outgoing first bus CAN messages in rusEFI console
823  offset 188 bit 23 */
824  bool verboseCan : 1 {};
825  /**
826  * Experimental setting that will cause a misfire
827  * DO NOT ENABLE.
828  offset 188 bit 24 */
830  /**
831  * On some Ford and Toyota vehicles one of the pedal sensors is not linear on the full range, i.e. in the specific range of the positions we effectively have only one sensor.
832  offset 188 bit 25 */
833  bool useFordRedundantPps : 1 {};
834  /**
835  offset 188 bit 26 */
836  bool cltSensorPulldown : 1 {};
837  /**
838  offset 188 bit 27 */
839  bool iatSensorPulldown : 1 {};
840  /**
841  offset 188 bit 28 */
842  bool allowIdenticalPps : 1 {};
843  /**
844  offset 188 bit 29 */
846  /**
847  * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
848  offset 188 bit 30 */
849  bool useSpiImu : 1 {};
850  /**
851  offset 188 bit 31 */
853  /**
854  * Closed throttle, 1 volt = 200 units.
855  * See also tps1_1AdcChannel
856  * set tps_min X
857  * units: ADC
858  * offset 192
859  */
860  int16_t tpsMin;
861  /**
862  * Full throttle.
863  * See also tps1_1AdcChannel
864  * set tps_max X
865  * units: ADC
866  * offset 194
867  */
868  int16_t tpsMax;
869  /**
870  * TPS error detection: what throttle % is unrealistically low?
871  * Also used for accelerator pedal error detection if so equipped.
872  * units: %
873  * offset 196
874  */
876  /**
877  * TPS error detection: what throttle % is unrealistically high?
878  * Also used for accelerator pedal error detection if so equipped.
879  * units: %
880  * offset 198
881  */
883  /**
884  * offset 200
885  */
887  /**
888  * Dwell duration while cranking
889  * units: ms
890  * offset 208
891  */
893  /**
894  * Once engine speed passes this value, start reducing ETB angle.
895  * units: rpm
896  * offset 212
897  */
899  /**
900  * This far above 'Soft limiter start', fully close the throttle. At the bottom of the range, throttle control is normal. At the top of the range, the throttle is fully closed.
901  * units: rpm
902  * offset 214
903  */
905  /**
906  * @see isMapAveragingEnabled
907  * offset 216
908  */
910  /**
911  * todo: merge with channel settings, use full-scale Thermistor here!
912  * offset 356
913  */
915  /**
916  * offset 388
917  */
919  /**
920  * units: deg
921  * offset 420
922  */
924  /**
925  * value '6' for 8MHz hw osc
926  * read hip9011 datasheet for details
927  * todo split into two bit fields
928  * units: integer
929  * offset 424
930  */
932  /**
933  * offset 428
934  */
936  /**
937  * Engine displacement in litres
938  * units: L
939  * offset 432
940  */
941  scaled_channel<uint16_t, 1000, 1> displacement;
942  /**
943  * units: RPM
944  * offset 434
945  */
947  /**
948  * Number of cylinder the engine has.
949  * offset 436
950  */
951  uint32_t cylindersCount;
952  /**
953  * offset 440
954  */
956  /**
957  * offset 441
958  */
959  uint8_t justATempTest;
960  /**
961  * Delta kPa for MAP sync
962  * units: kPa
963  * offset 442
964  */
966  /**
967  * How many % of ignition events will be cut
968  * units: %
969  * offset 443
970  */
972  /**
973  * @@CYLINDER_BORE_TOOLTIP@@
974  * units: mm
975  * offset 444
976  */
978  /**
979  * This setting controls which fuel quantity control algorithm is used.
980  * Alpha-N means drive by TPS commonly only used for NA engines
981  * Speed Density requires MAP sensor and is the default choice for may installs
982  * MAF air charge is a cylinder filling based method that uses a mass air flow sensor.
983  * offset 448
984  */
986  /**
987  * units: %
988  * offset 449
989  */
990  uint8_t ALSMaxTPS;
991  /**
992  * This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous".
993  * offset 450
994  */
996  /**
997  * This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups.
998  * offset 451
999  */
1001  /**
1002  * Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1003  * offset 452
1004  */
1006  /**
1007  * Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1008  * offset 454
1009  */
1011  /**
1012  * Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1013  * offset 455
1014  */
1016  /**
1017  * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.
1018  * There is tapering towards running timing advance
1019  * set cranking_timing_angle X
1020  * units: deg
1021  * offset 456
1022  */
1024  /**
1025  * Single coil = distributor
1026  * Individual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode
1027  * Wasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder
1028  * Two distributors = A pair of distributors, found on some BMW, Toyota and other engines
1029  * set ignition_mode X
1030  * offset 460
1031  */
1033  /**
1034  * How many consecutive gap rations have to match expected ranges for sync to happen
1035  * units: count
1036  * offset 461
1037  */
1039  /**
1040  * Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).
1041  * units: kph
1042  * offset 462
1043  */
1044  uint8_t maxIdleVss;
1045  /**
1046  * offset 463
1047  */
1049  /**
1050  * Expected oil pressure after starting the engine. If oil pressure does not reach this level within 5 seconds of engine start, fuel will be cut. Set to 0 to disable and always allow starting.
1051  * units: kPa
1052  * offset 464
1053  */
1055  /**
1056  * Dynamic uses the timing map to decide the ignition timing
1057  * Static timing fixes the timing to the value set below (only use for checking static timing with a timing light).
1058  * offset 466
1059  */
1061  /**
1062  * offset 467
1063  */
1065  /**
1066  * This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing
1067  * This mode is useful when adjusting distributor location.
1068  * units: RPM
1069  * offset 468
1070  */
1072  /**
1073  * Angle between Top Dead Center (TDC) and the first trigger event.
1074  * Positive value in case of synchronization point before TDC and negative in case of synchronization point after TDC
1075  * .Knowing this angle allows us to control timing and other angles in reference to TDC.
1076  * HOWTO:
1077  * 1: Switch to fixed timing mode on 'ignition setting' dialog
1078  * 2: use an actual timing light to calibrate
1079  * 3: add/subtract until timing light confirms desired fixed timing value!'
1080  * units: deg btdc
1081  * offset 472
1082  */
1084  /**
1085  * Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v.
1086  * units: coef
1087  * offset 476
1088  */
1090  /**
1091  * This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading.
1092  * units: coef
1093  * offset 480
1094  */
1096  /**
1097  * Cooling fan turn-on temperature threshold, in Celsius
1098  * units: deg C
1099  * offset 484
1100  */
1102  /**
1103  * Cooling fan turn-off temperature threshold, in Celsius
1104  * units: deg C
1105  * offset 488
1106  */
1108  /**
1109  * offset 492
1110  */
1112  /**
1113  * need 4 byte alignment
1114  * units: units
1115  * offset 494
1116  */
1118  /**
1119  * Number of revolutions per kilometer for the wheels your vehicle speed sensor is connected to. Use an online calculator to determine this based on your tire size.
1120  * units: revs/km
1121  * offset 496
1122  */
1124  /**
1125  * CANbus thread period in ms
1126  * units: ms
1127  * offset 500
1128  */
1130  /**
1131  * units: index
1132  * offset 504
1133  */
1135  /**
1136  * First throttle body, first sensor. See also pedalPositionAdcChannel
1137  * offset 508
1138  */
1140  /**
1141  * This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB.
1142  * offset 509
1143  */
1145  /**
1146  * This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined.
1147  * offset 510
1148  */
1150  /**
1151  * Second throttle body position sensor, single channel so far
1152  * offset 511
1153  */
1155  /**
1156  * 0.1 is a good default value
1157  * units: x
1158  * offset 512
1159  */
1161  /**
1162  * just a temporary solution
1163  * units: angle
1164  * offset 516
1165  */
1167  /**
1168  * offset 520
1169  */
1171  /**
1172  * Extra air taper amount
1173  * units: %
1174  * offset 532
1175  */
1177  /**
1178  * offset 536
1179  */
1181  /**
1182  * Duty cycle to use in case of a sensor failure. This duty cycle should produce the minimum possible amount of boost. This duty is also used in case any of the minimum RPM/TPS/MAP conditions are not met.
1183  * units: %
1184  * offset 537
1185  */
1187  /**
1188  * offset 538
1189  */
1191  /**
1192  * offset 539
1193  */
1195  /**
1196  * offset 540
1197  */
1199  /**
1200  * units: volts
1201  * offset 544
1202  */
1203  float adcVcc;
1204  /**
1205  * Magic engine phase: we compare instant MAP at X to instant MAP at x+360 angle in one complete cycle
1206  * units: Deg
1207  * offset 548
1208  */
1210  /**
1211  * Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.
1212  * offset 552
1213  */
1214  brain_input_pin_e camInputs[CAM_INPUTS_COUNT];
1215  /**
1216  * offset 560
1217  */
1219  /**
1220  * Electronic throttle pedal position first channel
1221  * See throttlePedalPositionSecondAdcChannel for second channel
1222  * See also tps1_1AdcChannel
1223  * See throttlePedalUpVoltage and throttlePedalWOTVoltage
1224  * offset 580
1225  */
1227  /**
1228  * TPS/PPS error threshold
1229  * units: %
1230  * offset 581
1231  */
1232  scaled_channel<uint8_t, 10, 1> etbSplit;
1233  /**
1234  * offset 582
1235  */
1237  /**
1238  * offset 584
1239  */
1241  /**
1242  * offset 585
1243  */
1245  /**
1246  * Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata
1247  * offset 586
1248  */
1250  /**
1251  * @see hasBaroSensor
1252  * offset 588
1253  */
1255  /**
1256  * offset 600
1257  */
1259  /**
1260  * Ignition timing to remove when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
1261  * units: %
1262  * offset 612
1263  */
1264  scaled_channel<uint8_t, 10, 1> knockRetardAggression;
1265  /**
1266  * After a knock event, reapply timing at this rate.
1267  * units: deg/s
1268  * offset 613
1269  */
1270  scaled_channel<uint8_t, 10, 1> knockRetardReapplyRate;
1271  /**
1272  * Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync.
1273  * offset 614
1274  */
1276  /**
1277  * offset 615
1278  */
1280  /**
1281  * Number of turns of your vehicle speed sensor per turn of the wheels. For example if your sensor is on the transmission output, enter your axle/differential ratio. If you are using a hub-mounted sensor, enter a value of 1.0.
1282  * units: ratio
1283  * offset 616
1284  */
1285  scaled_channel<uint16_t, 1000, 1> vssGearRatio;
1286  /**
1287  * Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response.
1288  * offset 618
1289  */
1291  /**
1292  * Number of pulses output per revolution of the shaft where your VSS is mounted. For example, GM applications of the T56 output 17 pulses per revolution of the transmission output shaft.
1293  * units: count
1294  * offset 619
1295  */
1296  uint8_t vssToothCount;
1297  /**
1298  * Override the Y axis (load) value used for only the Idle VE table.
1299  * Advanced users only: If you aren't sure you need this, you probably don't need this.
1300  * offset 620
1301  */
1303  /**
1304  * need 4 byte alignment
1305  * units: units
1306  * offset 621
1307  */
1309  /**
1310  * offset 622
1311  */
1313  /**
1314  * offset 624
1315  */
1316  output_pin_e injectionPins[MAX_CYLINDER_COUNT];
1317  /**
1318  * offset 648
1319  */
1320  output_pin_e ignitionPins[MAX_CYLINDER_COUNT];
1321  /**
1322  * offset 672
1323  */
1325  /**
1326  * offset 673
1327  */
1329  /**
1330  * offset 674
1331  */
1333  /**
1334  * offset 676
1335  */
1337  /**
1338  * How many consecutive VVT gap rations have to match expected ranges for sync to happen
1339  * units: count
1340  * offset 677
1341  */
1343  /**
1344  * Check engine light, also malfunction indicator light. Always blinks once on boot.
1345  * offset 678
1346  */
1348  /**
1349  * offset 680
1350  */
1352  /**
1353  * offset 681
1354  */
1356  /**
1357  * offset 682
1358  */
1360  /**
1361  * Some cars have a switch to indicate that clutch pedal is all the way down
1362  * offset 684
1363  */
1365  /**
1366  * offset 686
1367  */
1369  /**
1370  * offset 688
1371  */
1373  /**
1374  * offset 689
1375  */
1377  /**
1378  * offset 690
1379  */
1381  /**
1382  * offset 698
1383  */
1385  /**
1386  * offset 699
1387  */
1389  /**
1390  * offset 700
1391  */
1393  /**
1394  * Digital Potentiometer is used by stock ECU stimulation code
1395  * offset 702
1396  */
1398  /**
1399  * offset 703
1400  */
1402  /**
1403  * offset 704
1404  */
1406  /**
1407  * offset 706
1408  */
1410  /**
1411  * Useful in Research&Development phase
1412  * offset 707
1413  */
1415  /**
1416  * First throttle body, second sensor.
1417  * offset 708
1418  */
1420  /**
1421  * Second throttle body, second sensor.
1422  * offset 709
1423  */
1425  /**
1426  * Electronic throttle pedal position input
1427  * Second channel
1428  * See also tps1_1AdcChannel
1429  * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
1430  * offset 710
1431  */
1433  /**
1434  * AFR, WBO, EGO - whatever you like to call it
1435  * offset 711
1436  */
1438  /**
1439  * offset 712
1440  */
1441  Gpio mc33810_cs[C_MC33810_COUNT];
1442  /**
1443  * need 4 byte alignment
1444  * units: units
1445  * offset 714
1446  */
1448  /**
1449  * 0.1 is a good default value
1450  * units: x
1451  * offset 716
1452  */
1454  /**
1455  * offset 720
1456  */
1457  brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT];
1458  /**
1459  * Minimum allowed time for the boost phase. If the boost target current is reached before this time elapses, it is assumed that the injector has failed short circuit.
1460  * units: us
1461  * offset 724
1462  */
1464  /**
1465  * offset 726
1466  */
1468  /**
1469  * offset 727
1470  */
1472  /**
1473  * Ratio between the wheels and your transmission output.
1474  * units: ratio
1475  * offset 728
1476  */
1477  scaled_channel<uint16_t, 100, 1> finalGearRatio;
1478  /**
1479  * offset 730
1480  */
1482  /**
1483  * offset 732
1484  */
1486  /**
1487  * need 4 byte alignment
1488  * units: units
1489  * offset 733
1490  */
1492  /**
1493  * Each rusEFI piece can provide synthetic trigger signal for external ECU. Sometimes these wires are routed back into trigger inputs of the same rusEFI board.
1494  * See also directSelfStimulation which is different.
1495  * offset 734
1496  */
1497  Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT];
1498  /**
1499  * units: g/s
1500  * offset 738
1501  */
1502  scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
1503  /**
1504  * offset 740
1505  */
1506  pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT];
1507  /**
1508  * offset 742
1509  */
1511  /**
1512  * need 4 byte alignment
1513  * units: units
1514  * offset 743
1515  */
1517  /**
1518  * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
1519  * offset 744
1520  */
1522  /**
1523  * offset 746
1524  */
1526  /**
1527  * units: RPM
1528  * offset 747
1529  */
1530  scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
1531  /**
1532  * units: %
1533  * offset 748
1534  */
1535  scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
1536  /**
1537  * need 4 byte alignment
1538  * units: units
1539  * offset 749
1540  */
1542  /**
1543  offset 752 bit 0 */
1544  bool is_enabled_spi_1 : 1 {};
1545  /**
1546  offset 752 bit 1 */
1547  bool is_enabled_spi_2 : 1 {};
1548  /**
1549  offset 752 bit 2 */
1550  bool is_enabled_spi_3 : 1 {};
1551  /**
1552  * enable sd/disable sd
1553  offset 752 bit 3 */
1554  bool isSdCardEnabled : 1 {};
1555  /**
1556  * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
1557  offset 752 bit 4 */
1558  bool rusefiVerbose29b : 1 {};
1559  /**
1560  offset 752 bit 5 */
1561  bool rethrowHardFault : 1 {};
1562  /**
1563  offset 752 bit 6 */
1564  bool isHip9011Enabled : 1 {};
1565  /**
1566  offset 752 bit 7 */
1568  /**
1569  offset 752 bit 8 */
1570  bool verboseQuad : 1 {};
1571  /**
1572  * This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed.
1573  offset 752 bit 9 */
1574  bool useStepperIdle : 1 {};
1575  /**
1576  offset 752 bit 10 */
1577  bool enabledStep1Limiter : 1 {};
1578  /**
1579  offset 752 bit 11 */
1580  bool useTpicAdvancedMode : 1 {};
1581  /**
1582  offset 752 bit 12 */
1584  /**
1585  offset 752 bit 13 */
1586  bool verboseTLE8888 : 1 {};
1587  /**
1588  * CAN broadcast using custom rusEFI protocol
1589  * enable can_broadcast/disable can_broadcast
1590  offset 752 bit 14 */
1591  bool enableVerboseCanTx : 1 {};
1592  /**
1593  offset 752 bit 15 */
1595  /**
1596  offset 752 bit 16 */
1597  bool flipWboChannels : 1 {};
1598  /**
1599  * Useful for individual intakes
1600  offset 752 bit 17 */
1602  /**
1603  offset 752 bit 18 */
1605  /**
1606  * If enabled, try to fire the engine before a full engine cycle has been completed using RPM estimated from the last 90 degrees of engine rotation. As soon as the trigger syncs plus 90 degrees rotation, fuel and ignition events will occur. If disabled, worst case may require up to 4 full crank rotations before any events are scheduled.
1607  offset 752 bit 19 */
1609  /**
1610  * This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing.
1611  offset 752 bit 20 */
1613  /**
1614  * Override the IAC position during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars or engines that have trouble returning to idle.
1615  offset 752 bit 21 */
1617  /**
1618  offset 752 bit 22 */
1620  /**
1621  offset 752 bit 23 */
1623  /**
1624  * Allows disabling the ETB when the engine is stopped. You may not like the power draw or PWM noise from the motor, so this lets you turn it off until it's necessary.
1625  offset 752 bit 24 */
1627  /**
1628  offset 752 bit 25 */
1629  bool is_enabled_spi_4 : 1 {};
1630  /**
1631  * Disable the electronic throttle motor and DC idle motor for testing.
1632  * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle.
1633  offset 752 bit 26 */
1634  bool pauseEtbControl : 1 {};
1635  /**
1636  offset 752 bit 27 */
1637  bool tpsTpsPercentMode : 1 {};
1638  /**
1639  offset 752 bit 28 */
1640  bool verboseKLine : 1 {};
1641  /**
1642  offset 752 bit 29 */
1644  /**
1645  * AEM X-Series or rusEFI Wideband
1646  offset 752 bit 30 */
1647  bool enableAemXSeries : 1 {};
1648  /**
1649  offset 752 bit 31 */
1650  bool unused32nd : 1 {};
1651  /**
1652  * offset 756
1653  */
1654  brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT];
1655  /**
1656  * offset 764
1657  */
1659  /**
1660  * need 4 byte alignment
1661  * units: units
1662  * offset 765
1663  */
1665  /**
1666  * offset 766
1667  */
1669  /**
1670  * offset 768
1671  */
1673  /**
1674  * offset 770
1675  */
1677  /**
1678  * need 4 byte alignment
1679  * units: units
1680  * offset 771
1681  */
1683  /**
1684  * offset 772
1685  */
1687  /**
1688  * Boost Voltage
1689  * units: v
1690  * offset 776
1691  */
1692  uint8_t mc33_hvolt;
1693  /**
1694  * Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost.
1695  * units: kPa
1696  * offset 777
1697  */
1699  /**
1700  * units: %
1701  * offset 778
1702  */
1704  /**
1705  * units: %
1706  * offset 779
1707  */
1709  /**
1710  * offset 780
1711  */
1713  /**
1714  * offset 781
1715  */
1717  /**
1718  * offset 782
1719  */
1721  /**
1722  * need 4 byte alignment
1723  * units: units
1724  * offset 783
1725  */
1727  /**
1728  * units: kg
1729  * offset 784
1730  */
1731  uint16_t vehicleWeight;
1732  /**
1733  * How far above idle speed do we consider idling, i.e. coasting detection threshold.
1734  * For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.
1735  * units: RPM
1736  * offset 786
1737  */
1739  /**
1740  * Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment.
1741  * units: ms
1742  * offset 788
1743  */
1744  scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
1745  /**
1746  * offset 790
1747  */
1749  /**
1750  * offset 792
1751  */
1753  /**
1754  * offset 794
1755  */
1757  /**
1758  * Some vehicles have a switch to indicate that clutch pedal is all the way up
1759  * offset 796
1760  */
1762  /**
1763  * offset 798
1764  */
1766  /**
1767  * offset 799
1768  */
1770  /**
1771  * offset 800
1772  */
1773  Gpio max31855_cs[EGT_CHANNEL_COUNT];
1774  /**
1775  * Continental/GM flex fuel sensor, 50-150hz type
1776  * offset 816
1777  */
1779  /**
1780  * Since torque reduction pin is usually shared with launch control, most people have an RPM where behavior under that is Launch Control, over that is Flat Shift/Torque Reduction
1781  * units: rpm
1782  * offset 818
1783  */
1785  /**
1786  * offset 820
1787  */
1789  /**
1790  * offset 821
1791  */
1793  /**
1794  * Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0
1795  * units: :1
1796  * offset 822
1797  */
1798  scaled_channel<uint8_t, 10, 1> stoichRatioSecondary;
1799  /**
1800  * Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open.
1801  * units: %
1802  * offset 823
1803  */
1805  /**
1806  * Rate the ECU will log to the SD card, in hz (log lines per second).
1807  * units: hz
1808  * offset 824
1809  */
1811  /**
1812  * offset 826
1813  */
1815  /**
1816  * need 4 byte alignment
1817  * units: units
1818  * offset 827
1819  */
1821  /**
1822  * offset 828
1823  */
1825  /**
1826  * offset 830
1827  */
1829  /**
1830  * On some vehicles we can disable starter once engine is already running
1831  * offset 832
1832  */
1834  /**
1835  * need 4 byte alignment
1836  * units: units
1837  * offset 833
1838  */
1840  /**
1841  * Some Subaru and some Mazda use double-solenoid idle air valve
1842  * offset 834
1843  */
1845  /**
1846  * See also starterControlPin
1847  * offset 836
1848  */
1850  /**
1851  * units: RPM
1852  * offset 838
1853  */
1854  scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
1855  /**
1856  * offset 839
1857  */
1859  /**
1860  * This many MAP samples are used to estimate the current MAP. This many samples are considered, and the minimum taken. Recommended value is 1 for single-throttle engines, and your number of cylinders for individual throttle bodies.
1861  * units: count
1862  * offset 840
1863  */
1865  /**
1866  * Below this throttle position, the engine is considered idling. If you have an electronic throttle, this checks accelerator pedal position instead of throttle position, and should be set to 1-2%.
1867  * units: %
1868  * offset 844
1869  */
1871  /**
1872  * units: %
1873  * offset 846
1874  */
1876  /**
1877  * units: ADC
1878  * offset 848
1879  */
1881  /**
1882  * units: ADC
1883  * offset 850
1884  */
1886  /**
1887  * units: rpm
1888  * offset 852
1889  */
1891  /**
1892  * Maximum time to crank starter when start/stop button is pressed
1893  * units: Seconds
1894  * offset 854
1895  */
1897  /**
1898  * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
1899  * offset 856
1900  */
1902  /**
1903  * offset 858
1904  */
1906  /**
1907  * need 4 byte alignment
1908  * units: units
1909  * offset 859
1910  */
1912  /**
1913  * offset 860
1914  */
1916  /**
1917  * units: %
1918  * offset 862
1919  */
1921  /**
1922  * Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed
1923  * units: s
1924  * offset 863
1925  */
1926  scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
1927  /**
1928  * offset 864
1929  */
1930  script_setting_t scriptSetting[SCRIPT_SETTING_COUNT];
1931  /**
1932  * offset 896
1933  */
1935  /**
1936  * offset 898
1937  */
1939  /**
1940  * offset 900
1941  */
1943  /**
1944  * offset 902
1945  */
1947  /**
1948  * offset 904
1949  */
1951  /**
1952  * offset 906
1953  */
1955  /**
1956  * offset 908
1957  */
1959  /**
1960  * offset 910
1961  */
1963  /**
1964  * offset 912
1965  */
1967  /**
1968  * Saab Combustion Detection Module knock signal input pin
1969  * also known as Saab Ion Sensing Module
1970  * offset 914
1971  */
1973  /**
1974  * offset 916
1975  */
1977  /**
1978  * rusEFI console Sensor Sniffer mode
1979  * offset 917
1980  */
1982  /**
1983  * offset 918
1984  */
1986  /**
1987  * need 4 byte alignment
1988  * units: units
1989  * offset 919
1990  */
1992  /**
1993  offset 920 bit 0 */
1994  bool clutchUpPinInverted : 1 {};
1995  /**
1996  offset 920 bit 1 */
1998  /**
1999  * If enabled we use two H-bridges to drive stepper idle air valve
2000  offset 920 bit 2 */
2002  /**
2003  offset 920 bit 3 */
2004  bool multisparkEnable : 1 {};
2005  /**
2006  offset 920 bit 4 */
2007  bool enableLaunchRetard : 1 {};
2008  /**
2009  offset 920 bit 5 */
2010  bool canInputBCM : 1 {};
2011  /**
2012  * This property is useful if using rusEFI as TCM or BCM only
2013  offset 920 bit 6 */
2014  bool consumeObdSensors : 1 {};
2015  /**
2016  * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
2017  offset 920 bit 7 */
2018  bool enableCanVss : 1 {};
2019  /**
2020  offset 920 bit 8 */
2022  /**
2023  offset 920 bit 9 */
2025  /**
2026  * If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise.
2027  offset 920 bit 10 */
2029  /**
2030  offset 920 bit 11 */
2032  /**
2033  offset 920 bit 12 */
2034  bool enableSoftwareKnock : 1 {};
2035  /**
2036  * Verbose info in console below engineSnifferRpmThreshold
2037  * enable vvt_details
2038  offset 920 bit 13 */
2039  bool verboseVVTDecoding : 1 {};
2040  /**
2041  offset 920 bit 14 */
2042  bool invertCamVVTSignal : 1 {};
2043  /**
2044  * In Alpha-N mode, compensate for air temperature.
2045  offset 920 bit 15 */
2046  bool alphaNUseIat : 1 {};
2047  /**
2048  offset 920 bit 16 */
2049  bool knockBankCyl1 : 1 {};
2050  /**
2051  offset 920 bit 17 */
2052  bool knockBankCyl2 : 1 {};
2053  /**
2054  offset 920 bit 18 */
2055  bool knockBankCyl3 : 1 {};
2056  /**
2057  offset 920 bit 19 */
2058  bool knockBankCyl4 : 1 {};
2059  /**
2060  offset 920 bit 20 */
2061  bool knockBankCyl5 : 1 {};
2062  /**
2063  offset 920 bit 21 */
2064  bool knockBankCyl6 : 1 {};
2065  /**
2066  offset 920 bit 22 */
2067  bool knockBankCyl7 : 1 {};
2068  /**
2069  offset 920 bit 23 */
2070  bool knockBankCyl8 : 1 {};
2071  /**
2072  offset 920 bit 24 */
2073  bool knockBankCyl9 : 1 {};
2074  /**
2075  offset 920 bit 25 */
2076  bool knockBankCyl10 : 1 {};
2077  /**
2078  offset 920 bit 26 */
2079  bool knockBankCyl11 : 1 {};
2080  /**
2081  offset 920 bit 27 */
2082  bool knockBankCyl12 : 1 {};
2083  /**
2084  offset 920 bit 28 */
2085  bool tcuEnabled : 1 {};
2086  /**
2087  offset 920 bit 29 */
2089  /**
2090  * If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils
2091  offset 920 bit 30 */
2093  /**
2094  * Print incoming and outgoing second bus CAN messages in rusEFI console
2095  offset 920 bit 31 */
2096  bool verboseCan2 : 1 {};
2097  /**
2098  * offset 924
2099  */
2100  dc_io etbIo[ETB_COUNT];
2101  /**
2102  * Wastegate control Solenoid
2103  * offset 940
2104  */
2106  /**
2107  * offset 942
2108  */
2110  /**
2111  * need 4 byte alignment
2112  * units: units
2113  * offset 943
2114  */
2116  /**
2117  * offset 944
2118  */
2120  /**
2121  * offset 946
2122  */
2124  /**
2125  * offset 948
2126  */
2128  /**
2129  * offset 968
2130  */
2132  /**
2133  * offset 969
2134  */
2136  /**
2137  * offset 970
2138  */
2140  /**
2141  * units: Hz
2142  * offset 972
2143  */
2145  /**
2146  * offset 976
2147  */
2149  /**
2150  * offset 977
2151  */
2153  /**
2154  * How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs.
2155  * units: sec
2156  * offset 978
2157  */
2158  scaled_channel<uint8_t, 20, 1> tpsAccelLookback;
2159  /**
2160  * Pause closed loop fueling after deceleration fuel cut occurs. Set this to a little longer than however long is required for normal fueling behavior to resume after fuel cut.
2161  * units: sec
2162  * offset 979
2163  */
2164  scaled_channel<uint8_t, 10, 1> noFuelTrimAfterDfcoTime;
2165  /**
2166  * Launch disabled above this speed if setting is above zero
2167  * units: Kph
2168  * offset 980
2169  */
2171  /**
2172  * Starting Launch RPM window to activate (subtracts from Launch RPM)
2173  * units: RPM
2174  * offset 984
2175  */
2177  /**
2178  * units: ms
2179  * offset 988
2180  */
2182  /**
2183  * offset 992
2184  */
2186  /**
2187  * offset 996
2188  */
2190  /**
2191  * offset 1000
2192  */
2194  /**
2195  * offset 1004
2196  */
2198  /**
2199  * offset 1008
2200  */
2202  /**
2203  * offset 1012
2204  */
2206  /**
2207  * offset 1036
2208  */
2209  dc_io stepperDcIo[DC_PER_STEPPER];
2210  /**
2211  * For example, BMW, GM or Chevrolet
2212  * REQUIRED for rusEFI Online
2213  * offset 1052
2214  */
2216  /**
2217  * For example, LS1 or NB2
2218  * REQUIRED for rusEFI Online
2219  * offset 1084
2220  */
2222  /**
2223  * For example, Hunchback or Orange Miata
2224  * Vehicle name has to be unique between your vehicles.
2225  * REQUIRED for rusEFI Online
2226  * offset 1116
2227  */
2229  /**
2230  * offset 1148
2231  */
2232  output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT];
2233  /**
2234  * offset 1160
2235  */
2237  /**
2238  * offset 1162
2239  */
2241  /**
2242  * need 4 byte alignment
2243  * units: units
2244  * offset 1163
2245  */
2247  /**
2248  * offset 1164
2249  */
2251  /**
2252  * offset 1166
2253  */
2255  /**
2256  * need 4 byte alignment
2257  * units: units
2258  * offset 1167
2259  */
2261  /**
2262  * offset 1168
2263  */
2265  /**
2266  * offset 1170
2267  */
2268  output_pin_e luaOutputPins[LUA_PWM_COUNT];
2269  /**
2270  * need 4 byte alignment
2271  * units: units
2272  * offset 1186
2273  */
2275  /**
2276  * Angle between cam sensor and VVT zero position
2277  * units: value
2278  * offset 1188
2279  */
2280  float vvtOffsets[CAM_INPUTS_COUNT];
2281  /**
2282  * offset 1204
2283  */
2284  vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT];
2285  /**
2286  * offset 1236
2287  */
2288  gppwm_note_t gpPwmNote[GPPWM_CHANNELS];
2289  /**
2290  * units: ADC
2291  * offset 1300
2292  */
2294  /**
2295  * units: ADC
2296  * offset 1302
2297  */
2299  /**
2300  * Select which bus the wideband controller is attached to.
2301  offset 1304 bit 0 */
2302  bool widebandOnSecondBus : 1 {};
2303  /**
2304  * Enables lambda sensor closed loop feedback for fuelling.
2305  offset 1304 bit 1 */
2307  /**
2308  * On even fire engines with even number of cylinders we go wasted spark during cranking. Use this setting to disable wasted spark cranking on odd fire engines.
2309  offset 1304 bit 2 */
2310  bool oddFireEngine : 1 {};
2311  /**
2312  * Write SD card log even when powered by USB
2313  offset 1304 bit 3 */
2314  bool alwaysWriteSdCard : 1 {};
2315  /**
2316  * Second harmonic (aka double) is usually quieter background noise
2317  offset 1304 bit 4 */
2319  /**
2320  offset 1304 bit 5 */
2322  /**
2323  * Sometimes we have a performance issue while printing error
2324  offset 1304 bit 6 */
2325  bool silentTriggerError : 1 {};
2326  /**
2327  offset 1304 bit 7 */
2328  bool useLinearCltSensor : 1 {};
2329  /**
2330  * enable can_read/disable can_read
2331  offset 1304 bit 8 */
2332  bool canReadEnabled : 1 {};
2333  /**
2334  * enable can_write/disable can_write. See also can1ListenMode
2335  offset 1304 bit 9 */
2336  bool canWriteEnabled : 1 {};
2337  /**
2338  offset 1304 bit 10 */
2339  bool useLinearIatSensor : 1 {};
2340  /**
2341  offset 1304 bit 11 */
2343  /**
2344  * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
2345  offset 1304 bit 12 */
2347  /**
2348  * This enables smart alternator control and activates the extra alternator settings.
2349  offset 1304 bit 13 */
2351  /**
2352  * https://wiki.rusefi.com/Trigger-Configuration-Guide
2353  * This setting flips the signal from the primary engine speed sensor.
2354  offset 1304 bit 14 */
2356  /**
2357  * https://wiki.rusefi.com/Trigger-Configuration-Guide
2358  * This setting flips the signal from the secondary engine speed sensor.
2359  offset 1304 bit 15 */
2361  /**
2362  offset 1304 bit 16 */
2363  bool cutFuelOnHardLimit : 1 {};
2364  /**
2365  * Be careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer.
2366  offset 1304 bit 17 */
2367  bool cutSparkOnHardLimit : 1 {};
2368  /**
2369  offset 1304 bit 18 */
2370  bool launchFuelCutEnable : 1 {};
2371  /**
2372  * This is the Cut Mode normally used
2373  offset 1304 bit 19 */
2375  /**
2376  offset 1304 bit 20 */
2378  /**
2379  offset 1304 bit 21 */
2381  /**
2382  offset 1304 bit 22 */
2383  bool unusedFancy14 : 1 {};
2384  /**
2385  offset 1304 bit 23 */
2386  bool unusedFancy7 : 1 {};
2387  /**
2388  offset 1304 bit 24 */
2389  bool unusedFancy8 : 1 {};
2390  /**
2391  offset 1304 bit 25 */
2392  bool unusedFancy9 : 1 {};
2393  /**
2394  offset 1304 bit 26 */
2395  bool unusedFancy10 : 1 {};
2396  /**
2397  * Are you a developer troubleshooting TS over CAN ISO/TP?
2398  offset 1304 bit 27 */
2399  bool verboseIsoTp : 1 {};
2400  /**
2401  offset 1304 bit 28 */
2403  /**
2404  offset 1304 bit 29 */
2406  /**
2407  offset 1304 bit 30 */
2408  bool twoStroke : 1 {};
2409  /**
2410  * Where is your primary skipped wheel located?
2411  offset 1304 bit 31 */
2412  bool skippedWheelOnCam : 1 {};
2413  /**
2414  * offset 1308
2415  */
2417  /**
2418  * need 4 byte alignment
2419  * units: units
2420  * offset 1309
2421  */
2423  /**
2424  * A/C button input
2425  * offset 1310
2426  */
2428  /**
2429  * offset 1312
2430  */
2432  /**
2433  * Expected neutral position
2434  * units: %
2435  * offset 1313
2436  */
2438  /**
2439  * See also idleRpmPid
2440  * offset 1314
2441  */
2443  /**
2444  * need 4 byte alignment
2445  * units: units
2446  * offset 1315
2447  */
2449  /**
2450  offset 1316 bit 0 */
2451  bool isInjectionEnabled : 1 {};
2452  /**
2453  offset 1316 bit 1 */
2454  bool isIgnitionEnabled : 1 {};
2455  /**
2456  * When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders.
2457  offset 1316 bit 2 */
2459  /**
2460  * Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?
2461  offset 1316 bit 3 */
2462  bool complexWallModel : 1 {};
2463  /**
2464  * RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution
2465  offset 1316 bit 4 */
2466  bool alwaysInstantRpm : 1 {};
2467  /**
2468  offset 1316 bit 5 */
2470  /**
2471  * If enabled, use separate temperature multiplier table for cranking idle position.
2472  * If disabled, use normal running multiplier table applied to the cranking base position.
2473  offset 1316 bit 6 */
2475  /**
2476  * This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed.
2477  offset 1316 bit 7 */
2479  /**
2480  offset 1316 bit 8 */
2482  /**
2483  * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
2484  offset 1316 bit 9 */
2486  /**
2487  * Verbose info in console below engineSnifferRpmThreshold
2488  * enable trigger_details
2489  offset 1316 bit 10 */
2491  /**
2492  offset 1316 bit 11 */
2493  bool unused1188b12 : 1 {};
2494  /**
2495  offset 1316 bit 12 */
2496  bool cutFuelInAcr : 1 {};
2497  /**
2498  offset 1316 bit 13 */
2499  bool hondaK : 1 {};
2500  /**
2501  * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
2502  offset 1316 bit 14 */
2504  /**
2505  * Read MAP sensor on ECU start-up to use as baro value.
2506  offset 1316 bit 15 */
2508  /**
2509  * In Constant mode, timing is automatically tapered to running as RPM increases.
2510  * In Table mode, the "Cranking ignition advance" table is used directly.
2511  offset 1316 bit 16 */
2513  /**
2514  * This enables the various ignition corrections during cranking (IAT, CLT and PID idle).
2515  * You probably don't need this.
2516  offset 1316 bit 17 */
2518  /**
2519  * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
2520  offset 1316 bit 18 */
2521  bool flexCranking : 1 {};
2522  /**
2523  * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
2524  offset 1316 bit 19 */
2525  bool useIacPidMultTable : 1 {};
2526  /**
2527  offset 1316 bit 20 */
2529  /**
2530  * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
2531  offset 1316 bit 21 */
2532  bool launchSmoothRetard : 1 {};
2533  /**
2534  * Some engines are OK running semi-random sequential while other engine require phase synchronization
2535  offset 1316 bit 22 */
2537  /**
2538  * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
2539  offset 1316 bit 23 */
2540  bool useCltBasedRpmLimit : 1 {};
2541  /**
2542  * If enabled, don't wait for engine start to heat O2 sensors.
2543  * WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
2544  offset 1316 bit 24 */
2545  bool forceO2Heating : 1 {};
2546  /**
2547  * If increased VVT duty cycle increases the indicated VVT angle, set this to 'advance'. If it decreases, set this to 'retard'. Most intake cams use 'advance', and most exhaust cams use 'retard'.
2548  offset 1316 bit 25 */
2550  /**
2551  * If increased VVT duty cycle increases the indicated VVT angle, set this to 'advance'. If it decreases, set this to 'retard'. Most intake cams use 'advance', and most exhaust cams use 'retard'.
2552  offset 1316 bit 26 */
2554  /**
2555  offset 1316 bit 27 */
2557  /**
2558  * 'Trigger' mode will write a high speed log of trigger events (warning: uses lots of space!). 'Normal' mode will write a standard MLG of sensors, engine function, etc. similar to the one captured in TunerStudio.
2559  offset 1316 bit 28 */
2560  bool sdTriggerLog : 1 {};
2561  /**
2562  offset 1316 bit 29 */
2563  bool ALSActivateInverted : 1 {};
2564  /**
2565  offset 1316 bit 30 */
2567  /**
2568  offset 1316 bit 31 */
2570  /**
2571  * units: count
2572  * offset 1320
2573  */
2575  /**
2576  * units: mult
2577  * offset 1324
2578  */
2580  /**
2581  * offset 1328
2582  */
2583  Gpio camInputsDebug[CAM_INPUTS_COUNT];
2584  /**
2585  * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
2586  * units: RPM
2587  * offset 1336
2588  */
2590  /**
2591  * set warningPeriod X
2592  * units: seconds
2593  * offset 1338
2594  */
2595  int16_t warningPeriod;
2596  /**
2597  * units: angle
2598  * offset 1340
2599  */
2601  /**
2602  * units: angle
2603  * offset 1344
2604  */
2606  /**
2607  * units: ms
2608  * offset 1348
2609  */
2611  /**
2612  * units: count
2613  * offset 1352
2614  */
2616  /**
2617  * Pedal position to realize that we need to reduce torque when the trigger pin is uuuh triggered
2618  * offset 1356
2619  */
2621  /**
2622  * Duration in ms or duty cycle depending on selected mode
2623  * offset 1360
2624  */
2626  /**
2627  * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
2628  * units: Seconds
2629  * offset 1364
2630  */
2631  float wwaeTau;
2632  /**
2633  * offset 1368
2634  */
2636  /**
2637  * offset 1388
2638  */
2640  /**
2641  * offset 1408
2642  */
2643  Gpio triggerInputDebugPins[TRIGGER_INPUT_PIN_COUNT];
2644  /**
2645  * RPM range above upper limit for extra air taper
2646  * units: RPM
2647  * offset 1412
2648  */
2650  /**
2651  * offset 1414
2652  */
2654  /**
2655  * Closed throttle#2. todo: extract these two fields into a structure
2656  * See also tps2_1AdcChannel
2657  * units: ADC
2658  * offset 1416
2659  */
2660  int16_t tps2Min;
2661  /**
2662  * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!
2663  * See also tps1_1AdcChannel
2664  * units: ADC
2665  * offset 1418
2666  */
2667  int16_t tps2Max;
2668  /**
2669  * See also startStopButtonPin
2670  * offset 1420
2671  */
2673  /**
2674  * offset 1422
2675  */
2677  /**
2678  * need 4 byte alignment
2679  * units: units
2680  * offset 1423
2681  */
2683  /**
2684  * offset 1424
2685  */
2687  /**
2688  * units: Pulse
2689  * offset 1426
2690  */
2692  /**
2693  * need 4 byte alignment
2694  * units: units
2695  * offset 1427
2696  */
2698  /**
2699  * kPa value which is too low to be true
2700  * units: kPa
2701  * offset 1428
2702  */
2704  /**
2705  * kPa value which is too high to be true
2706  * units: kPa
2707  * offset 1432
2708  */
2710  /**
2711  * How long to wait for the spark to fire before recharging the coil for another spark.
2712  * units: ms
2713  * offset 1436
2714  */
2715  scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
2716  /**
2717  * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
2718  * units: ms
2719  * offset 1438
2720  */
2721  scaled_channel<uint16_t, 1000, 1> multisparkDwell;
2722  /**
2723  * See cltIdleRpmBins
2724  * offset 1440
2725  */
2727  /**
2728  * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
2729  * units: Fraction
2730  * offset 1460
2731  */
2732  float wwaeBeta;
2733  /**
2734  * See also EFI_CONSOLE_RX_BRAIN_PIN
2735  * offset 1464
2736  */
2738  /**
2739  * offset 1466
2740  */
2742  /**
2743  * offset 1468
2744  */
2745  Gpio auxValves[AUX_DIGITAL_VALVE_COUNT];
2746  /**
2747  * offset 1472
2748  */
2750  /**
2751  * offset 1474
2752  */
2754  /**
2755  * units: voltage
2756  * offset 1476
2757  */
2759  /**
2760  * Pedal in the floor
2761  * units: voltage
2762  * offset 1480
2763  */
2765  /**
2766  * on IGN voltage detection turn fuel pump on to build fuel pressure
2767  * units: seconds
2768  * offset 1484
2769  */
2771  /**
2772  * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
2773  * units: RPM
2774  * offset 1486
2775  */
2777  /**
2778  * For how long after the pin has been triggered will the cut/reduction stay active. After that, even if the pin is still triggered, torque is re-introduced
2779  * units: ms
2780  * offset 1488
2781  */
2783  /**
2784  * See Over/Undervoltage Shutdown/Retry bit in documentation
2785  offset 1492 bit 0 */
2787  /**
2788  offset 1492 bit 1 */
2789  bool mc33810Gpgd0Mode : 1 {};
2790  /**
2791  offset 1492 bit 2 */
2792  bool mc33810Gpgd1Mode : 1 {};
2793  /**
2794  offset 1492 bit 3 */
2795  bool mc33810Gpgd2Mode : 1 {};
2796  /**
2797  offset 1492 bit 4 */
2798  bool mc33810Gpgd3Mode : 1 {};
2799  /**
2800  * Send out board statistics
2801  offset 1492 bit 5 */
2803  /**
2804  offset 1492 bit 6 */
2805  bool luaCanRxWorkaround : 1 {};
2806  /**
2807  offset 1492 bit 7 */
2808  bool flexSensorInverted : 1 {};
2809  /**
2810  offset 1492 bit 8 */
2812  /**
2813  offset 1492 bit 9 */
2814  bool unusedHere1212 : 1 {};
2815  /**
2816  offset 1492 bit 10 */
2817  bool unusedHere1213 : 1 {};
2818  /**
2819  * Use Aux Speed 1 as one of speeds for wheel slip ratio?
2820  offset 1492 bit 11 */
2822  /**
2823  * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
2824  offset 1492 bit 12 */
2826  /**
2827  offset 1492 bit 13 */
2828  bool is_enabled_spi_5 : 1 {};
2829  /**
2830  offset 1492 bit 14 */
2831  bool is_enabled_spi_6 : 1 {};
2832  /**
2833  * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
2834  offset 1492 bit 15 */
2835  bool enableAemXSeriesEgt : 1 {};
2836  /**
2837  offset 1492 bit 16 */
2839  /**
2840  offset 1492 bit 17 */
2842  /**
2843  offset 1492 bit 18 */
2844  bool unusedBit2423423 : 1 {};
2845  /**
2846  offset 1492 bit 19 */
2848  /**
2849  offset 1492 bit 20 */
2850  bool devBit0 : 1 {};
2851  /**
2852  offset 1492 bit 21 */
2853  bool devBit1 : 1 {};
2854  /**
2855  offset 1492 bit 22 */
2856  bool devBit2 : 1 {};
2857  /**
2858  offset 1492 bit 23 */
2859  bool devBit3 : 1 {};
2860  /**
2861  offset 1492 bit 24 */
2862  bool devBit4 : 1 {};
2863  /**
2864  offset 1492 bit 25 */
2865  bool devBit5 : 1 {};
2866  /**
2867  offset 1492 bit 26 */
2868  bool devBit6 : 1 {};
2869  /**
2870  offset 1492 bit 27 */
2871  bool devBit7 : 1 {};
2872  /**
2873  offset 1492 bit 28 */
2874  bool unusedSkipWasHere : 1 {};
2875  /**
2876  offset 1492 bit 29 */
2878  /**
2879  offset 1492 bit 30 */
2881  /**
2882  offset 1492 bit 31 */
2883  bool unusedBit_516_31 : 1 {};
2884  /**
2885  * This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup.\Should be 100 once tune is better
2886  * units: cycles
2887  * offset 1496
2888  */
2890  /**
2891  * IAC Value added when coasting and transitioning into idle.
2892  * units: percent
2893  * offset 1498
2894  */
2895  int16_t iacByTpsTaper;
2896  /**
2897  * offset 1500
2898  */
2900  /**
2901  * offset 1502
2902  */
2904  /**
2905  * offset 1504
2906  */
2908  /**
2909  * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2910  * units: kph
2911  * offset 1506
2912  */
2914  /**
2915  * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2916  * units: kph
2917  * offset 1507
2918  */
2920  /**
2921  * Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in.
2922  * units: roc
2923  * offset 1508
2924  */
2926  /**
2927  * offset 1512
2928  */
2930  /**
2931  * offset 1516
2932  */
2934  /**
2935  * Sets what part of injection's is controlled by the injection phase table.
2936  * offset 1517
2937  */
2939  /**
2940  * See http://rusefi.com/s/debugmode
2941  * offset 1518
2942  */
2944  /**
2945  * Additional idle % when fan #1 is active
2946  * units: %
2947  * offset 1519
2948  */
2949  uint8_t fan1ExtraIdle;
2950  /**
2951  * Band rate for primary TTL
2952  * units: BPs
2953  * offset 1520
2954  */
2956  /**
2957  * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
2958  * units: roc
2959  * offset 1524
2960  */
2962  /**
2963  * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
2964  * units: coeff
2965  * offset 1528
2966  */
2968  /**
2969  * How many degrees of timing advance will be reduced during the Torque Reduction Time
2970  * units: deg
2971  * offset 1532
2972  */
2974  /**
2975  * units: voltage
2976  * offset 1536
2977  */
2979  /**
2980  * Pedal in the floor
2981  * units: voltage
2982  * offset 1540
2983  */
2985  /**
2986  * offset 1544
2987  */
2989  /**
2990  * Override the Y axis (load) value used for the VE table.
2991  * Advanced users only: If you aren't sure you need this, you probably don't need this.
2992  * offset 1545
2993  */
2995  /**
2996  * offset 1546
2997  */
2999  /**
3000  * Override the Y axis (load) value used for the AFR table.
3001  * Advanced users only: If you aren't sure you need this, you probably don't need this.
3002  * offset 1547
3003  */
3005  /**
3006  * units: A
3007  * offset 1548
3008  */
3009  scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3010  /**
3011  * units: A
3012  * offset 1549
3013  */
3014  scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
3015  /**
3016  * How long to deactivate power when hold current is reached before applying power again
3017  * units: us
3018  * offset 1550
3019  */
3021  /**
3022  * Maximum amount of time the solenoid can be active before assuming a programming error
3023  * units: ms
3024  * offset 1551
3025  */
3027  /**
3028  * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
3029  offset 1552 bit 0 */
3031  /**
3032  * Allow OpenBLT on Primary CAN
3033  offset 1552 bit 1 */
3034  bool canOpenBLT : 1 {};
3035  /**
3036  * Allow OpenBLT on Secondary CAN
3037  offset 1552 bit 2 */
3038  bool can2OpenBLT : 1 {};
3039  /**
3040  * Select whether to configure injector flow in volumetric flow (defualt, cc/min) or mass flow (g/s).
3041  offset 1552 bit 3 */
3043  /**
3044  offset 1552 bit 4 */
3046  /**
3047  offset 1552 bit 5 */
3048  bool kLineDoHondaSend : 1 {};
3049  /**
3050  * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
3051  offset 1552 bit 6 */
3052  bool can1ListenMode : 1 {};
3053  /**
3054  offset 1552 bit 7 */
3055  bool can2ListenMode : 1 {};
3056  /**
3057  offset 1552 bit 8 */
3058  bool unusedBit_552_8 : 1 {};
3059  /**
3060  offset 1552 bit 9 */
3061  bool unusedBit_552_9 : 1 {};
3062  /**
3063  offset 1552 bit 10 */
3064  bool unusedBit_552_10 : 1 {};
3065  /**
3066  offset 1552 bit 11 */
3067  bool unusedBit_552_11 : 1 {};
3068  /**
3069  offset 1552 bit 12 */
3070  bool unusedBit_552_12 : 1 {};
3071  /**
3072  offset 1552 bit 13 */
3073  bool unusedBit_552_13 : 1 {};
3074  /**
3075  offset 1552 bit 14 */
3076  bool unusedBit_552_14 : 1 {};
3077  /**
3078  offset 1552 bit 15 */
3079  bool unusedBit_552_15 : 1 {};
3080  /**
3081  offset 1552 bit 16 */
3082  bool unusedBit_552_16 : 1 {};
3083  /**
3084  offset 1552 bit 17 */
3085  bool unusedBit_552_17 : 1 {};
3086  /**
3087  offset 1552 bit 18 */
3088  bool unusedBit_552_18 : 1 {};
3089  /**
3090  offset 1552 bit 19 */
3091  bool unusedBit_552_19 : 1 {};
3092  /**
3093  offset 1552 bit 20 */
3094  bool unusedBit_552_20 : 1 {};
3095  /**
3096  offset 1552 bit 21 */
3097  bool unusedBit_552_21 : 1 {};
3098  /**
3099  offset 1552 bit 22 */
3100  bool unusedBit_552_22 : 1 {};
3101  /**
3102  offset 1552 bit 23 */
3103  bool unusedBit_552_23 : 1 {};
3104  /**
3105  offset 1552 bit 24 */
3106  bool unusedBit_552_24 : 1 {};
3107  /**
3108  offset 1552 bit 25 */
3109  bool unusedBit_552_25 : 1 {};
3110  /**
3111  offset 1552 bit 26 */
3112  bool unusedBit_552_26 : 1 {};
3113  /**
3114  offset 1552 bit 27 */
3115  bool unusedBit_552_27 : 1 {};
3116  /**
3117  offset 1552 bit 28 */
3118  bool unusedBit_552_28 : 1 {};
3119  /**
3120  offset 1552 bit 29 */
3121  bool unusedBit_552_29 : 1 {};
3122  /**
3123  offset 1552 bit 30 */
3124  bool unusedBit_552_30 : 1 {};
3125  /**
3126  offset 1552 bit 31 */
3127  bool unusedBit_552_31 : 1 {};
3128  /**
3129  * offset 1556
3130  */
3132  /**
3133  * offset 1557
3134  */
3136  /**
3137  * Duration of each test pulse
3138  * units: ms
3139  * offset 1558
3140  */
3141  scaled_channel<uint16_t, 100, 1> benchTestOnTime;
3142  /**
3143  * units: %
3144  * offset 1560
3145  */
3147  /**
3148  * units: %
3149  * offset 1561
3150  */
3151  scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
3152  /**
3153  * offset 1562
3154  */
3156  /**
3157  * need 4 byte alignment
3158  * units: units
3159  * offset 1563
3160  */
3162  /**
3163  * offset 1564
3164  */
3166  /**
3167  * offset 1566
3168  */
3170  /**
3171  * offset 1568
3172  */
3174  /**
3175  * offset 1569
3176  */
3178  /**
3179  * Override the Y axis (load) value used for the ignition table.
3180  * Advanced users only: If you aren't sure you need this, you probably don't need this.
3181  * offset 1570
3182  */
3184  /**
3185  * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
3186  * offset 1571
3187  */
3189  /**
3190  * offset 1572
3191  */
3193  /**
3194  * offset 1574
3195  */
3197  /**
3198  * need 4 byte alignment
3199  * units: units
3200  * offset 1575
3201  */
3203  /**
3204  * MAP value above which fuel is cut in case of overboost.
3205  * Set to 0 to disable overboost cut.
3206  * units: kPa (absolute)
3207  * offset 1576
3208  */
3210  /**
3211  * units: kg/h
3212  * offset 1580
3213  */
3214  scaled_channel<uint8_t, 1, 5> tchargeBins[16];
3215  /**
3216  * units: ratio
3217  * offset 1596
3218  */
3219  scaled_channel<uint8_t, 100, 1> tchargeValues[16];
3220  /**
3221  * Fixed timing, useful for TDC testing
3222  * units: deg
3223  * offset 1612
3224  */
3226  /**
3227  * MAP voltage for low point
3228  * units: v
3229  * offset 1616
3230  */
3232  /**
3233  * MAP voltage for low point
3234  * units: v
3235  * offset 1620
3236  */
3238  /**
3239  * EGO value correction
3240  * units: value
3241  * offset 1624
3242  */
3244  /**
3245  * VVT output solenoid pin for this cam
3246  * offset 1628
3247  */
3248  output_pin_e vvtPins[CAM_INPUTS_COUNT];
3249  /**
3250  * This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling.
3251  * units: percent
3252  * offset 1636
3253  */
3255  /**
3256  * offset 1640
3257  */
3259  /**
3260  * offset 1644
3261  */
3263  /**
3264  * offset 1648
3265  */
3267  /**
3268  * offset 1652
3269  */
3271  /**
3272  * offset 1656
3273  */
3275  /**
3276  * Minimim timing advance allowed. No spark on any cylinder will ever fire after this angle BTDC. For example, setting -10 here means no spark ever fires later than 10 deg ATDC. Note that this only concerns the primary spark: any trailing sparks or multispark may violate this constraint.
3277  * units: deg BTDC
3278  * offset 1658
3279  */
3281  /**
3282  * Maximum timing advance allowed. No spark on any cylinder will ever fire before this angle BTDC. For example, setting 45 here means no spark ever fires earlier than 45 deg BTDC
3283  * units: deg BTDC
3284  * offset 1659
3285  */
3287  /**
3288  * units: Hz
3289  * offset 1660
3290  */
3292  /**
3293  * set vvt_mode X
3294  * offset 1664
3295  */
3296  vvt_mode_e vvtMode[CAMS_PER_BANK];
3297  /**
3298  * Additional idle % when fan #2 is active
3299  * units: %
3300  * offset 1666
3301  */
3302  uint8_t fan2ExtraIdle;
3303  /**
3304  * Delay to allow fuel pressure to build before firing the priming pulse.
3305  * units: sec
3306  * offset 1667
3307  */
3308  scaled_channel<uint8_t, 100, 1> primingDelay;
3309  /**
3310  * offset 1668
3311  */
3312  adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT];
3313  /**
3314  * offset 1676
3315  */
3316  output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT];
3317  /**
3318  * offset 1700
3319  */
3321  /**
3322  * offset 1701
3323  */
3325  /**
3326  * None = I have a MAP-referenced fuel pressure regulator
3327  * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
3328  * Sensed rail pressure = I have a fuel pressure sensor
3329  * offset 1702
3330  */
3332  /**
3333  * offset 1703
3334  */
3336  /**
3337  * This is the pressure at which your injector flow is known.
3338  * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
3339  * units: kPa
3340  * offset 1704
3341  */
3343  /**
3344  * offset 1708
3345  */
3347  /**
3348  * offset 1740
3349  */
3351  /**
3352  * units: Deg
3353  * offset 1772
3354  */
3356  /**
3357  * units: Hz
3358  * offset 1774
3359  */
3360  int16_t etbFreq;
3361  /**
3362  * offset 1776
3363  */
3365  /**
3366  * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
3367  * offset 1796
3368  */
3370  /**
3371  * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
3372  * units: %
3373  * offset 1797
3374  */
3376  /**
3377  * Use to limit the max.current through the stepper motor (100% = no limit)
3378  * units: %
3379  * offset 1798
3380  */
3382  /**
3383  * offset 1799
3384  */
3386  /**
3387  * per-cylinder ignition and fueling timing correction for uneven engines
3388  * units: deg
3389  * offset 1800
3390  */
3391  angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT];
3392  /**
3393  * units: seconds
3394  * offset 1848
3395  */
3397  /**
3398  * offset 1852
3399  */
3401  /**
3402  * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
3403  * offset 1853
3404  */
3406  /**
3407  * offset 1854
3408  */
3410  /**
3411  * offset 1855
3412  */
3414  /**
3415  * offset 1856
3416  */
3418  /**
3419  * offset 1857
3420  */
3422  /**
3423  * offset 1858
3424  */
3426  /**
3427  * offset 1859
3428  */
3430  /**
3431  * offset 1860
3432  */
3434  /**
3435  * offset 1861
3436  */
3438  /**
3439  * ResetB
3440  * offset 1862
3441  */
3443  /**
3444  * offset 1864
3445  */
3447  /**
3448  * Brake pedal switch
3449  * offset 1866
3450  */
3452  /**
3453  * VVT output PID
3454  * TODO: rename to vvtPid
3455  * offset 1868
3456  */
3457  pid_s auxPid[CAMS_PER_BANK];
3458  /**
3459  * offset 1908
3460  */
3462  /**
3463  * units: C
3464  * offset 1940
3465  */
3466  int8_t primeBins[PRIME_CURVE_COUNT];
3467  /**
3468  * offset 1948
3469  */
3471  /**
3472  * offset 1968
3473  */
3475  /**
3476  * need 4 byte alignment
3477  * units: units
3478  * offset 1969
3479  */
3481  /**
3482  * offset 1970
3483  */
3485  /**
3486  * Cooling fan turn-on temperature threshold, in Celsius
3487  * units: deg C
3488  * offset 1972
3489  */
3491  /**
3492  * Cooling fan turn-off temperature threshold, in Celsius
3493  * units: deg C
3494  * offset 1973
3495  */
3497  /**
3498  * offset 1974
3499  */
3501  /**
3502  * offset 1976
3503  */
3505  /**
3506  * offset 1978
3507  */
3509  /**
3510  * need 4 byte alignment
3511  * units: units
3512  * offset 1979
3513  */
3515  /**
3516  * offset 1980
3517  */
3519  /**
3520  * need 4 byte alignment
3521  * units: units
3522  * offset 1982
3523  */
3525  /**
3526  * units: hz
3527  * offset 1984
3528  */
3530  /**
3531  * offset 1988
3532  */
3533  sent_input_pin_e sentInputPins[SENT_INPUT_COUNT];
3534  /**
3535  * This sets the RPM above which fuel cut is active.
3536  * units: rpm
3537  * offset 1990
3538  */
3540  /**
3541  * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
3542  * units: rpm
3543  * offset 1992
3544  */
3546  /**
3547  * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
3548  * units: %
3549  * offset 1994
3550  */
3552  /**
3553  * Fuel cutoff is disabled when the engine is cold.
3554  * units: C
3555  * offset 1996
3556  */
3558  /**
3559  * Increases PID reaction for RPM<target by adding extra percent to PID-error
3560  * units: %
3561  * offset 1998
3562  */
3564  /**
3565  * MAP value above which fuel injection is re-enabled.
3566  * units: kPa
3567  * offset 2000
3568  */
3570  /**
3571  * need 4 byte alignment
3572  * units: units
3573  * offset 2002
3574  */
3576  /**
3577  * offset 2004
3578  */
3580  /**
3581  * offset 2024
3582  */
3584  /**
3585  * offset 2044
3586  */
3587  gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT];
3588  /**
3589  * offset 2140
3590  */
3591  gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT];
3592  /**
3593  * offset 2204
3594  */
3595  gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT];
3596  /**
3597  * Heat transfer coefficient at zero flow.
3598  * 0 means the air charge is fully heated to the same temperature as CLT.
3599  * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3600  * offset 2332
3601  */
3603  /**
3604  * Heat transfer coefficient at high flow, as defined by "max air flow".
3605  * 0 means the air charge is fully heated to the same temperature as CLT.
3606  * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3607  * offset 2336
3608  */
3610  /**
3611  * High flow point for heat transfer estimation.
3612  * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
3613  * units: kg/h
3614  * offset 2340
3615  */
3617  /**
3618  * Maximum allowed rate of increase allowed for the estimated charge temperature
3619  * units: deg/sec
3620  * offset 2344
3621  */
3623  /**
3624  * Maximum allowed rate of decrease allowed for the estimated charge temperature
3625  * units: deg/sec
3626  * offset 2348
3627  */
3629  /**
3630  * offset 2352
3631  */
3633  /**
3634  * iTerm min value
3635  * offset 2356
3636  */
3637  int16_t etb_iTermMin;
3638  /**
3639  * iTerm max value
3640  * offset 2358
3641  */
3642  int16_t etb_iTermMax;
3643  /**
3644  * See useIdleTimingPidControl
3645  * offset 2360
3646  */
3648  /**
3649  * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
3650  * offset 2380
3651  */
3653  /**
3654  * offset 2384
3655  */
3657  /**
3658  * offset 2385
3659  */
3661  /**
3662  * A delay in cycles between fuel-enrich. portions
3663  * units: cycles
3664  * offset 2386
3665  */
3667  /**
3668  * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
3669  * units: coef
3670  * offset 2388
3671  */
3673  /**
3674  * offset 2392
3675  */
3677  /**
3678  * offset 2393
3679  */
3681  /**
3682  * iTerm min value
3683  * offset 2394
3684  */
3686  /**
3687  * offset 2396
3688  */
3690  /**
3691  * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
3692  * E0 = 14.7
3693  * E10 = 14.1
3694  * E85 = 9.9
3695  * E100 = 9.0
3696  * units: :1
3697  * offset 2397
3698  */
3699  scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
3700  /**
3701  * iTerm max value
3702  * offset 2398
3703  */
3705  /**
3706  * This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.
3707  * units: %
3708  * offset 2400
3709  */
3711  /**
3712  * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
3713  * offset 2404
3714  */
3715  uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT];
3716  /**
3717  * units: mg
3718  * offset 2416
3719  */
3720  scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT];
3721  /**
3722  * Trigger comparator center point voltage
3723  * units: V
3724  * offset 2424
3725  */
3726  scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
3727  /**
3728  * Trigger comparator hysteresis voltage (Min)
3729  * units: V
3730  * offset 2425
3731  */
3732  scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
3733  /**
3734  * Trigger comparator hysteresis voltage (Max)
3735  * units: V
3736  * offset 2426
3737  */
3738  scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
3739  /**
3740  * VR-sensor saturation RPM
3741  * units: RPM
3742  * offset 2427
3743  */
3744  scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
3745  /**
3746  * units: ratio
3747  * offset 2428
3748  */
3749  scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE];
3750  /**
3751  * units: RPM
3752  * offset 2440
3753  */
3754  uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE];
3755  /**
3756  * offset 2446
3757  */
3759  /**
3760  * offset 2447
3761  */
3763  /**
3764  * offset 2448
3765  */
3767  /**
3768  * need 4 byte alignment
3769  * units: units
3770  * offset 2450
3771  */
3773  /**
3774  * offset 2452
3775  */
3776  gppwm_channel gppwm[GPPWM_CHANNELS];
3777  /**
3778  * Boost Current
3779  * units: mA
3780  * offset 2884
3781  */
3782  uint16_t mc33_i_boost;
3783  /**
3784  * Peak Current
3785  * units: mA
3786  * offset 2886
3787  */
3788  uint16_t mc33_i_peak;
3789  /**
3790  * Hold Current
3791  * units: mA
3792  * offset 2888
3793  */
3794  uint16_t mc33_i_hold;
3795  /**
3796  * Maximum allowed boost phase time. If the injector current doesn't reach the threshold before this time elapses, it is assumed that the injector is missing or has failed open circuit.
3797  * units: us
3798  * offset 2890
3799  */
3801  /**
3802  * units: us
3803  * offset 2892
3804  */
3806  /**
3807  * Peak phase duration
3808  * units: us
3809  * offset 2894
3810  */
3812  /**
3813  * units: us
3814  * offset 2896
3815  */
3816  uint16_t mc33_t_bypass;
3817  /**
3818  * units: us
3819  * offset 2898
3820  */
3822  /**
3823  * Hold phase duration
3824  * units: us
3825  * offset 2900
3826  */
3828  /**
3829  * offset 2902
3830  */
3832  /**
3833  * offset 2903
3834  */
3836  /**
3837  * offset 2904
3838  */
3840  /**
3841  * offset 2905
3842  */
3844  /**
3845  * need 4 byte alignment
3846  * units: units
3847  * offset 2911
3848  */
3850  /**
3851  * units: ratio
3852  * offset 2912
3853  */
3854  float triggerGapOverrideFrom[GAP_TRACKING_LENGTH];
3855  /**
3856  * units: ratio
3857  * offset 2984
3858  */
3859  float triggerGapOverrideTo[GAP_TRACKING_LENGTH];
3860  /**
3861  * Below this RPM, use camshaft information to synchronize the crank's position for full sequential operation. Use this if your cam sensor does weird things at high RPM. Set to 0 to disable, and always use cam to help sync crank.
3862  * units: rpm
3863  * offset 3056
3864  */
3865  scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
3866  /**
3867  * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
3868  * units: sec
3869  * offset 3057
3870  */
3871  scaled_channel<uint8_t, 10, 1> dfcoDelay;
3872  /**
3873  * Delay before engaging the AC compressor. Set to 0 to engage immediately with no delay. Use this to prevent bogging at idle when AC engages.
3874  * units: sec
3875  * offset 3058
3876  */
3877  scaled_channel<uint8_t, 10, 1> acDelay;
3878  /**
3879  * offset 3059
3880  */
3882  /**
3883  * units: mg
3884  * offset 3060
3885  */
3886  scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
3887  /**
3888  * units: %
3889  * offset 3062
3890  */
3892  /**
3893  * units: lobes/cam
3894  * offset 3063
3895  */
3896  uint8_t hpfpCamLobes;
3897  /**
3898  * offset 3064
3899  */
3901  /**
3902  * Low engine speed for A/C. Larger engines can survive lower values
3903  * units: RPM
3904  * offset 3065
3905  */
3906  scaled_channel<int8_t, 1, 10> acLowRpmLimit;
3907  /**
3908  * If the requested activation time is below this angle, don't bother running the pump
3909  * units: deg
3910  * offset 3066
3911  */
3912  uint8_t hpfpMinAngle;
3913  /**
3914  * need 4 byte alignment
3915  * units: units
3916  * offset 3067
3917  */
3919  /**
3920  * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
3921  * units: cc
3922  * offset 3068
3923  */
3924  scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
3925  /**
3926  * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
3927  * units: deg
3928  * offset 3070
3929  */
3931  /**
3932  * offset 3071
3933  */
3935  /**
3936  * units: %/kPa
3937  * offset 3072
3938  */
3939  scaled_channel<uint16_t, 1000, 1> hpfpPidP;
3940  /**
3941  * units: %/kPa/lobe
3942  * offset 3074
3943  */
3944  scaled_channel<uint16_t, 100000, 1> hpfpPidI;
3945  /**
3946  * The fastest rate the target pressure can be reduced by. This is because HPFP have no way to bleed off pressure other than injecting fuel.
3947  * units: kPa/s
3948  * offset 3076
3949  */
3951  /**
3952  * offset 3078
3953  */
3955  /**
3956  * units: ratio
3957  * offset 3086
3958  */
3959  scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT];
3960  /**
3961  * We need to give engine time to build oil pressure without diverting it to VVT
3962  * units: ms
3963  * offset 3106
3964  */
3966  /**
3967  * units: Nm
3968  * offset 3108
3969  */
3970  scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE];
3971  /**
3972  * units: RPM
3973  * offset 3144
3974  */
3975  uint16_t torqueRpmBins[TORQUE_CURVE_SIZE];
3976  /**
3977  * units: Load
3978  * offset 3156
3979  */
3980  uint16_t torqueLoadBins[TORQUE_CURVE_SIZE];
3981  /**
3982  * offset 3168
3983  */
3985  /**
3986  * offset 3169
3987  */
3989  /**
3990  * units: deg
3991  * offset 3170
3992  */
3994  /**
3995  * offset 3172
3996  */
3998  /**
3999  * offset 3192
4000  */
4002  /**
4003  * offset 3212
4004  */
4006  /**
4007  * offset 3214
4008  */
4010  /**
4011  * need 4 byte alignment
4012  * units: units
4013  * offset 3215
4014  */
4016  /**
4017  * offset 3216
4018  */
4020  /**
4021  * offset 3218
4022  */
4024  /**
4025  * need 4 byte alignment
4026  * units: units
4027  * offset 3219
4028  */
4030  /**
4031  * offset 3220
4032  */
4034  /**
4035  * offset 3222
4036  */
4038  /**
4039  * offset 3224
4040  */
4042  /**
4043  * need 4 byte alignment
4044  * units: units
4045  * offset 3225
4046  */
4048  /**
4049  * offset 3226
4050  */
4052  /**
4053  * offset 3228
4054  */
4056  /**
4057  * offset 3230
4058  */
4060  /**
4061  * need 4 byte alignment
4062  * units: units
4063  * offset 3231
4064  */
4066  /**
4067  * offset 3232
4068  */
4070  /**
4071  * offset 3234
4072  */
4074  /**
4075  * units: %
4076  * offset 3236
4077  */
4079  /**
4080  * offset 3240
4081  */
4082  uint16_t tuneHidingKey;
4083  /**
4084  * offset 3242
4085  */
4087  /**
4088  * need 4 byte alignment
4089  * units: units
4090  * offset 3259
4091  */
4093  /**
4094  * offset 3260
4095  */
4096  uint16_t highSpeedOffsets[HIGH_SPEED_COUNT];
4097  /**
4098  * offset 3324
4099  */
4101  /**
4102  * need 4 byte alignment
4103  * units: units
4104  * offset 3325
4105  */
4107  /**
4108  * offset 3326
4109  */
4110  switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT];
4111  /**
4112  * units: rpm
4113  * offset 3342
4114  */
4115  int16_t ALSMinRPM;
4116  /**
4117  * units: rpm
4118  * offset 3344
4119  */
4120  int16_t ALSMaxRPM;
4121  /**
4122  * units: sec
4123  * offset 3346
4124  */
4126  /**
4127  * units: C
4128  * offset 3348
4129  */
4130  int8_t ALSMinCLT;
4131  /**
4132  * units: C
4133  * offset 3349
4134  */
4135  int8_t ALSMaxCLT;
4136  /**
4137  * offset 3350
4138  */
4140  /**
4141  * offset 3351
4142  */
4144  /**
4145  * units: %
4146  * offset 3352
4147  */
4149  /**
4150  * offset 3353
4151  */
4153  /**
4154  * offset 3354
4155  */
4157  /**
4158  * units: %
4159  * offset 3356
4160  */
4162  /**
4163  * units: %
4164  * offset 3360
4165  */
4167  /**
4168  * offset 3364
4169  */
4171  /**
4172  * Hysterisis: if Pressure High Disable is 240kpa, and acPressureEnableHyst is 20, when the ECU sees 240kpa, A/C will be disabled, and stay disabled until 240-20=220kpa is reached
4173  * units: kPa (absolute)
4174  * offset 3368
4175  */
4176  scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
4177  /**
4178  * offset 3369
4179  */
4181  /**
4182  * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4183  * units: %
4184  * offset 3370
4185  */
4186  scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4187  /**
4188  * For Toyota ETCS-i, use ~69%
4189  * units: %
4190  * offset 3371
4191  */
4192  scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4193  /**
4194  * offset 3372
4195  */
4196  pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT];
4197  /**
4198  * offset 3380
4199  */
4201  /**
4202  * offset 3382
4203  */
4204  uint16_t kLineBaudRate;
4205  /**
4206  * offset 3384
4207  */
4209  /**
4210  * offset 3385
4211  */
4213  /**
4214  * Crank angle ATDC of first lobe peak
4215  * units: deg
4216  * offset 3386
4217  */
4218  int16_t hpfpPeakPos;
4219  /**
4220  * units: us
4221  * offset 3388
4222  */
4223  int16_t kLinePeriodUs;
4224  /**
4225  * Window that the correction will be added throughout (example, if rpm limit is 7000, and rpmSoftLimitWindowSize is 200, the corrections activate at 6800RPM, creating a 200rpm window)
4226  * units: RPM
4227  * offset 3390
4228  */
4229  scaled_channel<uint8_t, 1, 10> rpmSoftLimitWindowSize;
4230  /**
4231  * Degrees of timing REMOVED from actual timing during soft RPM limit window
4232  * units: deg
4233  * offset 3391
4234  */
4235  scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4236  /**
4237  * % of fuel ADDED during window
4238  * units: %
4239  * offset 3392
4240  */
4241  scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
4242  /**
4243  * Hysterisis: if the hard limit is 7200rpm and rpmHardLimitHyst is 200rpm, then when the ECU sees 7200rpm, fuel/ign will cut, and stay cut until 7000rpm (7200-200) is reached
4244  * units: RPM
4245  * offset 3393
4246  */
4247  scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4248  /**
4249  * Time between bench test pulses
4250  * units: ms
4251  * offset 3394
4252  */
4253  scaled_channel<uint16_t, 10, 1> benchTestOffTime;
4254  /**
4255  * Hysterisis: if hard cut is 240kpa, and boostCutPressureHyst is 20, when the ECU sees 240kpa, fuel/ign will cut, and stay cut until 240-20=220kpa is reached
4256  * units: kPa (absolute)
4257  * offset 3396
4258  */
4259  scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4260  /**
4261  * Boost duty cycle modified by gear
4262  * units: %
4263  * offset 3397
4264  */
4265  scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT];
4266  /**
4267  * need 4 byte alignment
4268  * units: units
4269  * offset 3407
4270  */
4272  /**
4273  * How many test bench pulses do you want
4274  * offset 3408
4275  */
4276  uint32_t benchTestCount;
4277  /**
4278  * How long initial IAC adder is held before starting to decay.
4279  * units: seconds
4280  * offset 3412
4281  */
4282  scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
4283  /**
4284  * How long it takes to remove initial IAC adder to return to normal idle.
4285  * units: seconds
4286  * offset 3413
4287  */
4288  scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4289  /**
4290  * offset 3414
4291  */
4293  /**
4294  * offset 3426
4295  */
4297  /**
4298  * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
4299  * units: ratio
4300  * offset 3432
4301  */
4302  scaled_channel<uint16_t, 10000, 1> canVssScaling;
4303  /**
4304  * need 4 byte alignment
4305  * units: units
4306  * offset 3434
4307  */
4309  /**
4310  * offset 3436
4311  */
4313  /**
4314  * offset 3468
4315  */
4317  /**
4318  * offset 3500
4319  */
4321  /**
4322  * offset 3532
4323  */
4325  /**
4326  * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
4327  * offset 3564
4328  */
4330  /**
4331  * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
4332  * offset 3565
4333  */
4335  /**
4336  * offset 3566
4337  */
4338  Gpio dacOutputPins[DAC_OUTPUT_COUNT];
4339  /**
4340  * offset 3570
4341  */
4343  /**
4344  * Number of speedometer pulses per kilometer travelled.
4345  * offset 3572
4346  */
4348  /**
4349  * offset 3574
4350  */
4351  uint8_t simulatorCamPosition[CAM_INPUTS_COUNT];
4352  /**
4353  * offset 3578
4354  */
4356  /**
4357  * offset 3579
4358  */
4360  /**
4361  * units: ratio
4362  * offset 3580
4363  */
4364  float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH];
4365  /**
4366  * units: ratio
4367  * offset 3596
4368  */
4369  float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH];
4370  /**
4371  * units: %
4372  * offset 3612
4373  */
4374  int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4375  /**
4376  * If injector duty cycle hits this value, instantly cut fuel.
4377  * units: %
4378  * offset 3648
4379  */
4381  /**
4382  * If injector duty cycle hits this value for the specified delay time, cut fuel.
4383  * units: %
4384  * offset 3649
4385  */
4387  /**
4388  * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
4389  * units: sec
4390  * offset 3650
4391  */
4392  scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
4393  /**
4394  * need 4 byte alignment
4395  * units: units
4396  * offset 3651
4397  */
4399  /**
4400  * offset 3652
4401  */
4402  output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT];
4403  /**
4404  * units: Deg
4405  * offset 3676
4406  */
4407  int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4408  /**
4409  * units: %
4410  * offset 3712
4411  */
4412  int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4413  /**
4414  * offset 3748
4415  */
4417  /**
4418  * offset 3752
4419  */
4421  /**
4422  * offset 3756
4423  */
4425  /**
4426  * offset 3758
4427  */
4429  /**
4430  * offset 3760
4431  */
4433  /**
4434  * offset 3762
4435  */
4437  /**
4438  * offset 3764
4439  */
4441  /**
4442  * offset 3766
4443  */
4445  /**
4446  * offset 3768
4447  */
4449  /**
4450  * offset 3770
4451  */
4453  /**
4454  * offset 3772
4455  */
4457  /**
4458  * offset 3774
4459  */
4461  /**
4462  * offset 3775
4463  */
4465  /**
4466  * offset 3776
4467  */
4469  /**
4470  * offset 3777
4471  */
4473  /**
4474  * offset 3778
4475  */
4477  /**
4478  * offset 3779
4479  */
4481  /**
4482  * offset 3780
4483  */
4485  /**
4486  * offset 3781
4487  */
4489  /**
4490  * need 4 byte alignment
4491  * units: units
4492  * offset 3782
4493  */
4495  /**
4496  * Secondary TTL channel baud rate
4497  * units: BPs
4498  * offset 3784
4499  */
4501  /**
4502  * offset 3788
4503  */
4505  /**
4506  * offset 3790
4507  */
4509  /**
4510  * need 4 byte alignment
4511  * units: units
4512  * offset 3791
4513  */
4515  /**
4516  * offset 3792
4517  */
4519  /**
4520  * offset 3796
4521  */
4522  uint32_t device_uid[3];
4523  /**
4524  * offset 3808
4525  */
4527  /**
4528  * need 4 byte alignment
4529  * units: units
4530  * offset 3814
4531  */
4533  /**
4534  * units: Ohm
4535  * offset 3816
4536  */
4538  /**
4539  * offset 3820
4540  */
4542  /**
4543  * Nominal coil charge current, 0.25A step
4544  * units: A
4545  * offset 3824
4546  */
4547  scaled_channel<uint8_t, 4, 1> mc33810Nomi;
4548  /**
4549  * Maximum coil charge current, 1A step
4550  * units: A
4551  * offset 3825
4552  */
4553  uint8_t mc33810Maxi;
4554  /**
4555  * need 4 byte alignment
4556  * units: units
4557  * offset 3826
4558  */
4560  /**
4561  * offset 3828
4562  */
4564  /**
4565  * value of A/C pressure in kPa before that compressor is disengaged
4566  * units: kPa
4567  * offset 3848
4568  */
4569  uint16_t minAcPressure;
4570  /**
4571  * value of A/C pressure in kPa after that compressor is disengaged
4572  * units: kPa
4573  * offset 3850
4574  */
4575  uint16_t maxAcPressure;
4576  /**
4577  * Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise.
4578  * units: sec
4579  * offset 3852
4580  */
4581  scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
4582  /**
4583  * need 4 byte alignment
4584  * units: units
4585  * offset 3853
4586  */
4588  /**
4589  * offset 3856
4590  */
4592  /**
4593  * offset 3876
4594  */
4596  /**
4597  * units: units
4598  * offset 3896
4599  */
4600  uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING];
4601 };
4602 static_assert(sizeof(engine_configuration_s) == 4024);
4603 
4604 // start of ign_cyl_trim_s
4606  /**
4607  * offset 0
4608  */
4609  scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE];
4610 };
4611 static_assert(sizeof(ign_cyl_trim_s) == 16);
4612 
4613 // start of fuel_cyl_trim_s
4615  /**
4616  * offset 0
4617  */
4618  scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE];
4619 };
4620 static_assert(sizeof(fuel_cyl_trim_s) == 16);
4621 
4622 // start of blend_table_s
4624  /**
4625  * offset 0
4626  */
4627  scaled_channel<int16_t, 10, 1> table[8][8];
4628  /**
4629  * units: Load
4630  * offset 128
4631  */
4632  uint16_t loadBins[8];
4633  /**
4634  * units: RPM
4635  * offset 144
4636  */
4637  uint16_t rpmBins[8];
4638  /**
4639  * offset 160
4640  */
4642  /**
4643  * offset 161
4644  */
4646  /**
4647  * offset 162
4648  */
4649  scaled_channel<int16_t, 10, 1> blendBins[8];
4650  /**
4651  * units: %
4652  * offset 178
4653  */
4654  scaled_channel<uint8_t, 2, 1> blendValues[8];
4655  /**
4656  * need 4 byte alignment
4657  * units: units
4658  * offset 186
4659  */
4661 };
4662 static_assert(sizeof(blend_table_s) == 188);
4663 
4664 // start of persistent_config_s
4666  /**
4667  * offset 0
4668  */
4670  /**
4671  * units: mult
4672  * offset 4024
4673  */
4674  float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT];
4675  /**
4676  * units: count
4677  * offset 4168
4678  */
4679  float postCrankingDurationBins[CRANKING_ENRICH_COUNT];
4680  /**
4681  * units: C
4682  * offset 4192
4683  */
4684  int16_t postCrankingCLTBins[CRANKING_ENRICH_COUNT];
4685  /**
4686  * target TPS value, 0 to 100%
4687  * TODO: use int8 data date once we template interpolation method
4688  * units: target TPS position
4689  * offset 4204
4690  */
4691  float etbBiasBins[ETB_BIAS_CURVE_LENGTH];
4692  /**
4693  * PWM bias, open loop component of PID closed loop control
4694  * units: ETB duty cycle bias
4695  * offset 4236
4696  */
4697  float etbBiasValues[ETB_BIAS_CURVE_LENGTH];
4698  /**
4699  * units: %
4700  * offset 4268
4701  */
4702  scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE];
4703  /**
4704  * units: Load
4705  * offset 4332
4706  */
4707  uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE];
4708  /**
4709  * units: RPM
4710  * offset 4340
4711  */
4712  scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_SIZE];
4713  /**
4714  * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
4715  * units: RPM
4716  * offset 4348
4717  */
4718  uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE];
4719  /**
4720  * units: ms
4721  * offset 4364
4722  */
4723  scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE];
4724  /**
4725  * CLT-based target RPM for automatic idle controller
4726  * units: C
4727  * offset 4380
4728  */
4729  scaled_channel<int8_t, 1, 2> cltIdleRpmBins[CLT_CURVE_SIZE];
4730  /**
4731  * See idleRpmPid
4732  * units: RPM
4733  * offset 4396
4734  */
4735  scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE];
4736  /**
4737  * CLT-based timing correction
4738  * units: C
4739  * offset 4412
4740  */
4741  float cltTimingBins[CLT_TIMING_CURVE_SIZE];
4742  /**
4743  * units: degree
4744  * offset 4444
4745  */
4746  float cltTimingExtra[CLT_TIMING_CURVE_SIZE];
4747  /**
4748  * units: x
4749  * offset 4476
4750  */
4751  float scriptCurve1Bins[SCRIPT_CURVE_16];
4752  /**
4753  * units: y
4754  * offset 4540
4755  */
4756  float scriptCurve1[SCRIPT_CURVE_16];
4757  /**
4758  * units: x
4759  * offset 4604
4760  */
4761  float scriptCurve2Bins[SCRIPT_CURVE_16];
4762  /**
4763  * units: y
4764  * offset 4668
4765  */
4766  float scriptCurve2[SCRIPT_CURVE_16];
4767  /**
4768  * units: x
4769  * offset 4732
4770  */
4771  float scriptCurve3Bins[SCRIPT_CURVE_8];
4772  /**
4773  * units: y
4774  * offset 4764
4775  */
4776  float scriptCurve3[SCRIPT_CURVE_8];
4777  /**
4778  * units: x
4779  * offset 4796
4780  */
4781  float scriptCurve4Bins[SCRIPT_CURVE_8];
4782  /**
4783  * units: y
4784  * offset 4828
4785  */
4786  float scriptCurve4[SCRIPT_CURVE_8];
4787  /**
4788  * units: x
4789  * offset 4860
4790  */
4791  float scriptCurve5Bins[SCRIPT_CURVE_8];
4792  /**
4793  * units: y
4794  * offset 4892
4795  */
4796  float scriptCurve5[SCRIPT_CURVE_8];
4797  /**
4798  * units: x
4799  * offset 4924
4800  */
4801  float scriptCurve6Bins[SCRIPT_CURVE_8];
4802  /**
4803  * units: y
4804  * offset 4956
4805  */
4806  float scriptCurve6[SCRIPT_CURVE_8];
4807  /**
4808  * units: kPa
4809  * offset 4988
4810  */
4811  float baroCorrPressureBins[BARO_CORR_SIZE];
4812  /**
4813  * units: RPM
4814  * offset 5004
4815  */
4816  float baroCorrRpmBins[BARO_CORR_SIZE];
4817  /**
4818  * units: ratio
4819  * offset 5020
4820  */
4821  float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE];
4822  /**
4823  * Cranking fuel correction coefficient based on TPS
4824  * units: Ratio
4825  * offset 5084
4826  */
4827  float crankingTpsCoef[CRANKING_CURVE_SIZE];
4828  /**
4829  * units: %
4830  * offset 5116
4831  */
4832  float crankingTpsBins[CRANKING_CURVE_SIZE];
4833  /**
4834  * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
4835  * units: RPM
4836  * offset 5148
4837  */
4838  uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE];
4839  /**
4840  * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
4841  * units: deg
4842  * offset 5156
4843  */
4844  scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE];
4845  /**
4846  * RPM-based idle position for coasting
4847  * units: RPM
4848  * offset 5164
4849  */
4850  scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE];
4851  /**
4852  * RPM-based idle position for coasting
4853  * units: %
4854  * offset 5180
4855  */
4856  scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE];
4857  /**
4858  * offset 5196
4859  */
4861  /**
4862  * offset 5316
4863  */
4864  uint8_t unusedGapHere[16];
4865  /**
4866  * offset 5332
4867  */
4868  scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT];
4869  /**
4870  * units: RPM
4871  * offset 5396
4872  */
4873  scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT];
4874  /**
4875  * offset 5404
4876  */
4877  scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT];
4878  /**
4879  * offset 5468
4880  */
4881  uint8_t boostLoadBins[BOOST_LOAD_COUNT];
4882  /**
4883  * units: %
4884  * offset 5476
4885  */
4886  uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE];
4887  /**
4888  * units: %
4889  * offset 5540
4890  */
4891  uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE];
4892  /**
4893  * units: RPM
4894  * offset 5548
4895  */
4896  scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE];
4897  /**
4898  * CLT-based cranking position multiplier for simple manual idle controller
4899  * units: C
4900  * offset 5556
4901  */
4902  float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE];
4903  /**
4904  * CLT-based cranking position multiplier for simple manual idle controller
4905  * units: %
4906  * offset 5588
4907  */
4908  float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE];
4909  /**
4910  * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
4911  * units: RPM
4912  * offset 5620
4913  */
4914  scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE];
4915  /**
4916  * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
4917  * units: deg
4918  * offset 5628
4919  */
4920  float idleAdvance[IDLE_ADVANCE_CURVE_SIZE];
4921  /**
4922  * units: RPM
4923  * offset 5660
4924  */
4925  scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE];
4926  /**
4927  * units: load
4928  * offset 5664
4929  */
4930  uint8_t idleVeLoadBins[IDLE_VE_SIZE];
4931  /**
4932  * units: %
4933  * offset 5668
4934  */
4935  scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE];
4936  /**
4937  * offset 5700
4938  */
4940  /**
4941  * units: C
4942  * offset 13700
4943  */
4944  float cltFuelCorrBins[CLT_CURVE_SIZE];
4945  /**
4946  * units: ratio
4947  * offset 13764
4948  */
4949  float cltFuelCorr[CLT_CURVE_SIZE];
4950  /**
4951  * units: C
4952  * offset 13828
4953  */
4954  float iatFuelCorrBins[IAT_CURVE_SIZE];
4955  /**
4956  * units: ratio
4957  * offset 13892
4958  */
4959  float iatFuelCorr[IAT_CURVE_SIZE];
4960  /**
4961  * units: ratio
4962  * offset 13956
4963  */
4964  float crankingFuelCoef[CRANKING_CURVE_SIZE];
4965  /**
4966  * units: C
4967  * offset 13988
4968  */
4969  float crankingFuelBins[CRANKING_CURVE_SIZE];
4970  /**
4971  * units: counter
4972  * offset 14020
4973  */
4974  float crankingCycleBins[CRANKING_CURVE_SIZE];
4975  /**
4976  * units: C
4977  * offset 14052
4978  */
4979  int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE];
4980  /**
4981  * units: mult
4982  * offset 14060
4983  */
4984  float crankingCycleFuelCoef[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE];
4985  /**
4986  * CLT-based idle position multiplier for simple manual idle controller
4987  * units: C
4988  * offset 14188
4989  */
4990  float cltIdleCorrBins[CLT_CURVE_SIZE];
4991  /**
4992  * CLT-based idle position multiplier for simple manual idle controller
4993  * units: ratio
4994  * offset 14252
4995  */
4996  float cltIdleCorr[CLT_CURVE_SIZE];
4997  /**
4998  * Also known as MAF transfer function.
4999  * kg/hour value.
5000  * By the way 2.081989116 kg/h = 1 ft3/m
5001  * units: kg/hour
5002  * offset 14316
5003  */
5004  float mafDecoding[MAF_DECODING_COUNT];
5005  /**
5006  * units: V
5007  * offset 14444
5008  */
5009  float mafDecodingBins[MAF_DECODING_COUNT];
5010  /**
5011  * units: deg
5012  * offset 14572
5013  */
5014  scaled_channel<int8_t, 10, 1> ignitionIatCorrTable[8][8];
5015  /**
5016  * units: C
5017  * offset 14636
5018  */
5020  /**
5021  * units: Load
5022  * offset 14644
5023  */
5024  scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[8];
5025  /**
5026  * units: deg
5027  * offset 14652
5028  */
5029  int16_t injectionPhase[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5030  /**
5031  * units: Load
5032  * offset 15164
5033  */
5034  uint16_t injPhaseLoadBins[FUEL_LOAD_COUNT];
5035  /**
5036  * units: RPM
5037  * offset 15196
5038  */
5039  uint16_t injPhaseRpmBins[FUEL_RPM_COUNT];
5040  /**
5041  * units: onoff
5042  * offset 15228
5043  */
5044  uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT];
5045  /**
5046  * units: kPa
5047  * offset 15288
5048  */
5049  scaled_channel<uint16_t, 100, 1> mapEstimateTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5050  /**
5051  * units: % TPS
5052  * offset 15800
5053  */
5054  scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[FUEL_LOAD_COUNT];
5055  /**
5056  * units: RPM
5057  * offset 15832
5058  */
5059  uint16_t mapEstimateRpmBins[FUEL_RPM_COUNT];
5060  /**
5061  * units: value
5062  * offset 15864
5063  */
5064  int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_SIZE];
5065  /**
5066  * units: L
5067  * offset 15928
5068  */
5069  uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE];
5070  /**
5071  * units: RPM
5072  * offset 15944
5073  */
5074  uint16_t vvtTable1RpmBins[VVT_TABLE_SIZE];
5075  /**
5076  * units: value
5077  * offset 15960
5078  */
5079  int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_SIZE];
5080  /**
5081  * units: L
5082  * offset 16024
5083  */
5084  uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE];
5085  /**
5086  * units: RPM
5087  * offset 16040
5088  */
5089  uint16_t vvtTable2RpmBins[VVT_TABLE_SIZE];
5090  /**
5091  * units: deg
5092  * offset 16056
5093  */
5094  scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT];
5095  /**
5096  * units: Load
5097  * offset 16568
5098  */
5099  uint16_t ignitionLoadBins[IGN_LOAD_COUNT];
5100  /**
5101  * units: RPM
5102  * offset 16600
5103  */
5104  uint16_t ignitionRpmBins[IGN_RPM_COUNT];
5105  /**
5106  * units: %
5107  * offset 16632
5108  */
5109  scaled_channel<uint16_t, 10, 1> veTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5110  /**
5111  * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
5112  * offset 17144
5113  */
5114  uint16_t veLoadBins[FUEL_LOAD_COUNT];
5115  /**
5116  * units: RPM
5117  * offset 17176
5118  */
5119  uint16_t veRpmBins[FUEL_RPM_COUNT];
5120  /**
5121  * units: lambda
5122  * offset 17208
5123  */
5124  scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5125  /**
5126  * offset 17464
5127  */
5128  uint16_t lambdaLoadBins[FUEL_LOAD_COUNT];
5129  /**
5130  * units: RPM
5131  * offset 17496
5132  */
5133  uint16_t lambdaRpmBins[FUEL_RPM_COUNT];
5134  /**
5135  * units: value
5136  * offset 17528
5137  */
5138  float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE];
5139  /**
5140  * units: from
5141  * offset 17784
5142  */
5143  float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE];
5144  /**
5145  * units: to
5146  * offset 17816
5147  */
5148  float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE];
5149  /**
5150  * units: value
5151  * offset 17848
5152  */
5153  float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
5154  /**
5155  * units: L
5156  * offset 18104
5157  */
5158  int16_t scriptTable1LoadBins[SCRIPT_TABLE_8];
5159  /**
5160  * units: RPM
5161  * offset 18120
5162  */
5163  int16_t scriptTable1RpmBins[SCRIPT_TABLE_8];
5164  /**
5165  * units: value
5166  * offset 18136
5167  */
5168  float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE];
5169  /**
5170  * units: L
5171  * offset 18392
5172  */
5173  int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE];
5174  /**
5175  * units: RPM
5176  * offset 18408
5177  */
5178  int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE];
5179  /**
5180  * units: value
5181  * offset 18424
5182  */
5183  uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
5184  /**
5185  * units: L
5186  * offset 18488
5187  */
5188  int16_t scriptTable3LoadBins[SCRIPT_TABLE_8];
5189  /**
5190  * units: RPM
5191  * offset 18504
5192  */
5193  int16_t scriptTable3RpmBins[SCRIPT_TABLE_8];
5194  /**
5195  * units: value
5196  * offset 18520
5197  */
5198  uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM];
5199  /**
5200  * units: L
5201  * offset 18600
5202  */
5203  int16_t scriptTable4LoadBins[SCRIPT_TABLE_8];
5204  /**
5205  * units: RPM
5206  * offset 18616
5207  */
5208  int16_t scriptTable4RpmBins[TABLE_4_RPM];
5209  /**
5210  * offset 18636
5211  */
5212  uint16_t ignTrimLoadBins[IGN_TRIM_SIZE];
5213  /**
5214  * units: rpm
5215  * offset 18644
5216  */
5217  uint16_t ignTrimRpmBins[IGN_TRIM_SIZE];
5218  /**
5219  * offset 18652
5220  */
5222  /**
5223  * offset 18844
5224  */
5225  uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE];
5226  /**
5227  * units: rpm
5228  * offset 18852
5229  */
5230  uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE];
5231  /**
5232  * offset 18860
5233  */
5235  /**
5236  * units: ratio
5237  * offset 19052
5238  */
5239  scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE];
5240  /**
5241  * units: Airmass
5242  * offset 19068
5243  */
5244  scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH];
5245  /**
5246  * units: %
5247  * offset 19076
5248  */
5249  uint8_t tcu_pcValsR[TCU_TABLE_WIDTH];
5250  /**
5251  * units: %
5252  * offset 19084
5253  */
5254  uint8_t tcu_pcValsN[TCU_TABLE_WIDTH];
5255  /**
5256  * units: %
5257  * offset 19092
5258  */
5259  uint8_t tcu_pcVals1[TCU_TABLE_WIDTH];
5260  /**
5261  * units: %
5262  * offset 19100
5263  */
5264  uint8_t tcu_pcVals2[TCU_TABLE_WIDTH];
5265  /**
5266  * units: %
5267  * offset 19108
5268  */
5269  uint8_t tcu_pcVals3[TCU_TABLE_WIDTH];
5270  /**
5271  * units: %
5272  * offset 19116
5273  */
5274  uint8_t tcu_pcVals4[TCU_TABLE_WIDTH];
5275  /**
5276  * units: %
5277  * offset 19124
5278  */
5279  uint8_t tcu_pcVals12[TCU_TABLE_WIDTH];
5280  /**
5281  * units: %
5282  * offset 19132
5283  */
5284  uint8_t tcu_pcVals23[TCU_TABLE_WIDTH];
5285  /**
5286  * units: %
5287  * offset 19140
5288  */
5289  uint8_t tcu_pcVals34[TCU_TABLE_WIDTH];
5290  /**
5291  * units: %
5292  * offset 19148
5293  */
5294  uint8_t tcu_pcVals21[TCU_TABLE_WIDTH];
5295  /**
5296  * units: %
5297  * offset 19156
5298  */
5299  uint8_t tcu_pcVals32[TCU_TABLE_WIDTH];
5300  /**
5301  * units: %
5302  * offset 19164
5303  */
5304  uint8_t tcu_pcVals43[TCU_TABLE_WIDTH];
5305  /**
5306  * units: TPS
5307  * offset 19172
5308  */
5309  uint8_t tcu_tccTpsBins[8];
5310  /**
5311  * units: MPH
5312  * offset 19180
5313  */
5314  uint8_t tcu_tccLockSpeed[8];
5315  /**
5316  * units: MPH
5317  * offset 19188
5318  */
5320  /**
5321  * units: KPH
5322  * offset 19196
5323  */
5324  uint8_t tcu_32SpeedBins[8];
5325  /**
5326  * units: %
5327  * offset 19204
5328  */
5329  uint8_t tcu_32Vals[8];
5330  /**
5331  * units: %
5332  * offset 19212
5333  */
5334  scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE];
5335  /**
5336  * units: %
5337  * offset 19248
5338  */
5339  uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE];
5340  /**
5341  * units: RPM
5342  * offset 19254
5343  */
5344  scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_SIZE];
5345  /**
5346  * units: deg
5347  * offset 19260
5348  */
5349  scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE];
5350  /**
5351  * units: %
5352  * offset 19296
5353  */
5354  uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE];
5355  /**
5356  * units: RPM
5357  * offset 19302
5358  */
5359  scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_SIZE];
5360  /**
5361  * units: deg
5362  * offset 19308
5363  */
5364  scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[4][4];
5365  /**
5366  * units: TPS
5367  * offset 19340
5368  */
5370  /**
5371  * units: RPM
5372  * offset 19348
5373  */
5374  uint16_t alsIgnRetardrpmBins[4];
5375  /**
5376  * units: percent
5377  * offset 19356
5378  */
5379  scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[4][4];
5380  /**
5381  * units: TPS
5382  * offset 19388
5383  */
5385  /**
5386  * units: RPM
5387  * offset 19396
5388  */
5390  /**
5391  * units: ratio
5392  * offset 19404
5393  */
5394  scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[4][4];
5395  /**
5396  * units: TPS
5397  * offset 19436
5398  */
5399  uint16_t alsIgnSkipLoadBins[4];
5400  /**
5401  * units: RPM
5402  * offset 19444
5403  */
5404  uint16_t alsIgnSkiprpmBins[4];
5405  /**
5406  * offset 19452
5407  */
5408  blend_table_s ignBlends[IGN_BLEND_COUNT];
5409  /**
5410  * offset 20204
5411  */
5412  blend_table_s veBlends[VE_BLEND_COUNT];
5413  /**
5414  * units: %
5415  * offset 20956
5416  */
5417  scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[12];
5418  /**
5419  * In units of g/s normalized to choked flow conditions
5420  * units: g/s
5421  * offset 20980
5422  */
5423  scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[12];
5424  /**
5425  * offset 21004
5426  */
5428  /**
5429  * offset 21380
5430  */
5432  /**
5433  * units: level
5434  * offset 21756
5435  */
5436  float tcu_rangeP[RANGE_INPUT_COUNT];
5437  /**
5438  * units: level
5439  * offset 21780
5440  */
5441  float tcu_rangeR[RANGE_INPUT_COUNT];
5442  /**
5443  * units: level
5444  * offset 21804
5445  */
5446  float tcu_rangeN[RANGE_INPUT_COUNT];
5447  /**
5448  * units: level
5449  * offset 21828
5450  */
5451  float tcu_rangeD[RANGE_INPUT_COUNT];
5452  /**
5453  * units: level
5454  * offset 21852
5455  */
5456  float tcu_rangeM[RANGE_INPUT_COUNT];
5457  /**
5458  * units: level
5459  * offset 21876
5460  */
5461  float tcu_rangeM3[RANGE_INPUT_COUNT];
5462  /**
5463  * units: level
5464  * offset 21900
5465  */
5466  float tcu_rangeM2[RANGE_INPUT_COUNT];
5467  /**
5468  * units: level
5469  * offset 21924
5470  */
5471  float tcu_rangeM1[RANGE_INPUT_COUNT];
5472  /**
5473  * units: level
5474  * offset 21948
5475  */
5476  float tcu_rangePlus[RANGE_INPUT_COUNT];
5477  /**
5478  * units: level
5479  * offset 21972
5480  */
5481  float tcu_rangeMinus[RANGE_INPUT_COUNT];
5482  /**
5483  * units: level
5484  * offset 21996
5485  */
5486  float tcu_rangeLow[RANGE_INPUT_COUNT];
5487  /**
5488  * units: lambda
5489  * offset 22020
5490  */
5491  scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[4][4];
5492  /**
5493  * offset 22036
5494  */
5496  /**
5497  * units: RPM
5498  * offset 22044
5499  */
5501  /**
5502  * units: %
5503  * offset 22052
5504  */
5505  uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT];
5506  /**
5507  * offset 22088
5508  */
5509  uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT];
5510  /**
5511  * units: RPM
5512  * offset 22100
5513  */
5514  uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT];
5515  /**
5516  * units: deg C
5517  * offset 22112
5518  */
5519  int8_t wwCltBins[WWAE_TABLE_SIZE];
5520  /**
5521  * offset 22120
5522  */
5523  scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE];
5524  /**
5525  * offset 22128
5526  */
5527  scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE];
5528  /**
5529  * units: kPa
5530  * offset 22136
5531  */
5532  int8_t wwMapBins[WWAE_TABLE_SIZE];
5533  /**
5534  * offset 22144
5535  */
5536  scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE];
5537  /**
5538  * offset 22152
5539  */
5540  scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE];
5541  /**
5542  * units: %
5543  * offset 22160
5544  */
5545  scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE];
5546  /**
5547  * units: deg
5548  * offset 22176
5549  */
5550  scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE];
5551  /**
5552  * units: volts
5553  * offset 22192
5554  */
5555  uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE];
5556  /**
5557  * units: ms
5558  * offset 22200
5559  */
5560  scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE];
5561  /**
5562  * units: kPa
5563  * offset 22216
5564  */
5565  uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE];
5566  /**
5567  * units: load
5568  * offset 22416
5569  */
5570  scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE];
5571  /**
5572  * units: RPM
5573  * offset 22436
5574  */
5575  scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE];
5576  /**
5577  * units: %
5578  * offset 22446
5579  */
5580  int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE];
5581  /**
5582  * units: cc/lobe
5583  * offset 22546
5584  */
5585  scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE];
5586  /**
5587  * units: RPM
5588  * offset 22566
5589  */
5590  scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE];
5591  /**
5592  * units: RPM
5593  * offset 22576
5594  */
5595  uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE];
5596  /**
5597  * Knock sensor output knock detection threshold depending on current RPM.
5598  * units: dB
5599  * offset 22608
5600  */
5601  scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE];
5602  /**
5603  * units: RPM
5604  * offset 22624
5605  */
5606  scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE];
5607  /**
5608  * units: multiplier
5609  * offset 22628
5610  */
5611  scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE];
5612  /**
5613  * units: C
5614  * offset 22632
5615  */
5616  int8_t cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE];
5617  /**
5618  * units: RPM
5619  * offset 22636
5620  */
5621  uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE];
5622  /**
5623  * units: volt
5624  * offset 22644
5625  */
5626  scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT];
5627  /**
5628  * units: %
5629  * offset 22660
5630  */