rusEFI
The most advanced open source ECU
engine_configuration_generated_structures_proteus_f4.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 Tue May 14 14:11:05 UTC 2024
2 // by class com.rusefi.output.CHeaderConsumer
3 // begin
4 #pragma once
5 #include "rusefi_types.h"
6 // start of stft_cell_cfg_s
7 struct 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
125 struct MsIoBox_config_s {
126  /**
127  * offset 0
128  */
129  MsIoBoxId id;
130  /**
131  * offset 1
132  */
133  MsIoBoxVss vss;
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
144 struct 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
170 struct 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  */
236  uint8_t alignmentFill_at_106[2];
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  */
267  uint8_t alignmentFill_at_10[2];
268 };
269 static_assert(sizeof(air_pressure_sensor_config_s) == 12);
270 
271 // start of MAP_sensor_config_s
272 struct 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
305 struct 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  */
326  float resistance_1;
327  /**
328  * units: Ohm
329  * offset 16
330  */
331  float resistance_2;
332  /**
333  * units: Ohm
334  * offset 20
335  */
336  float resistance_3;
337  /**
338  * Pull-up resistor value on your board
339  * units: Ohm
340  * offset 24
341  */
342  float bias_resistor;
343 };
344 static_assert(sizeof(thermistor_conf_s) == 28);
345 
346 // start of linear_sensor_s
347 struct 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
380 struct ThermistorConf {
381  /**
382  * offset 0
383  */
385  /**
386  * offset 28
387  */
389  /**
390  * need 4 byte alignment
391  * units: units
392  * offset 29
393  */
394  uint8_t alignmentFill_at_29[3];
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
424 struct 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
483 struct idle_hardware_s {
484  /**
485  * units: Hz
486  * offset 0
487  */
488  int solenoidFrequency;
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  */
510  uint8_t alignmentFill_at_11[1];
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
537 struct 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  */
551  Gpio pin;
552  /**
553  * need 4 byte alignment
554  * units: units
555  * offset 14
556  */
557  uint8_t alignmentFill_at_14[2];
558 };
559 static_assert(sizeof(vr_threshold_s) == 16);
560 
561 // start of engine_configuration_s
562 struct 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  */
578  uint16_t sensorSnifferRpmThreshold;
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  */
597  uint16_t engineSnifferRpmThreshold;
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  */
627  float compressionRatio;
628  /**
629  * Voltage when the wastegate is closed.
630  * You probably don't have one of these!
631  * units: mv
632  * offset 20
633  */
634  uint16_t wastegatePositionMin;
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  */
642  uint16_t wastegatePositionMax;
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  * set_can_tx_pin X
668  * offset 32
669  */
670  Gpio canTxPin;
671  /**
672  * set_can_rx_pin X
673  * offset 34
674  */
675  Gpio canRxPin;
676  /**
677  * By the way ETB PID runs at 500hz, length in 1/500 of second here.
678  * offset 36
679  */
680  uint16_t etbExpAverageLength;
681  /**
682  * units: %
683  * offset 38
684  */
685  int8_t launchFuelAdderPercent;
686  /**
687  * Time required to detect a stuck throttle.
688  * units: sec
689  * offset 39
690  */
691  scaled_channel<uint8_t, 50, 1> etbJamTimeout;
692  /**
693  * offset 40
694  */
696  /**
697  * offset 42
698  */
700  /**
701  * Additional idle % while A/C is active
702  * units: %
703  * offset 43
704  */
705  uint8_t acIdleExtraOffset;
706  /**
707  * Value between 0 and 100 used in Manual mode
708  * units: %
709  * offset 44
710  */
711  float manIdlePosition;
712  /**
713  * 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.
714  * units: deg
715  * offset 48
716  */
718  /**
719  * Configures the maximum number of extra sparks to fire (does not include main spark)
720  * units: count
721  * offset 49
722  */
724  /**
725  * units: RPM
726  * offset 50
727  */
728  int16_t vvtControlMinRpm;
729  /**
730  * offset 52
731  */
733  /**
734  * offset 120
735  */
737  /**
738  * Does the vehicle have a turbo or supercharger?
739  offset 188 bit 0 */
740  bool isForcedInduction : 1 {};
741  /**
742  * 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.
743  offset 188 bit 1 */
744  bool useFordRedundantTps : 1 {};
745  /**
746  offset 188 bit 2 */
747  bool enableKline : 1 {};
748  /**
749  offset 188 bit 3 */
750  bool overrideTriggerGaps : 1 {};
751  /**
752  * Turn on this fan when AC is on.
753  offset 188 bit 4 */
754  bool enableFan1WithAc : 1 {};
755  /**
756  * Turn on this fan when AC is on.
757  offset 188 bit 5 */
758  bool enableFan2WithAc : 1 {};
759  /**
760  * Inhibit operation of this fan while the engine is not running.
761  offset 188 bit 6 */
762  bool disableFan1WhenStopped : 1 {};
763  /**
764  * Inhibit operation of this fan while the engine is not running.
765  offset 188 bit 7 */
766  bool disableFan2WhenStopped : 1 {};
767  /**
768  * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
769  offset 188 bit 8 */
770  bool enableTrailingSparks : 1 {};
771  /**
772  * TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode.
773  offset 188 bit 9 */
774  bool etb_use_two_wires : 1 {};
775  /**
776  * 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.
777  offset 188 bit 10 */
778  bool isDoubleSolenoidIdle : 1 {};
779  /**
780  offset 188 bit 11 */
781  bool useEeprom : 1 {};
782  /**
783  * Switch between Industrial and Cic PID implementation
784  offset 188 bit 12 */
785  bool useCicPidForIdle : 1 {};
786  /**
787  offset 188 bit 13 */
788  bool useTLE8888_cranking_hack : 1 {};
789  /**
790  offset 188 bit 14 */
791  bool kickStartCranking : 1 {};
792  /**
793  * This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).
794  offset 188 bit 15 */
796  /**
797  offset 188 bit 16 */
798  bool launchControlEnabled : 1 {};
799  /**
800  * "Detect double trigger edges"
801  offset 188 bit 17 */
802  bool doNotFilterTriggerEdgeNoise : 1 {};
803  /**
804  offset 188 bit 18 */
805  bool antiLagEnabled : 1 {};
806  /**
807  * For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table).
808  offset 188 bit 19 */
809  bool useRunningMathForCranking : 1 {};
810  /**
811  * Shall we display real life signal or just the part consumed by trigger decoder.
812  * Applies to both trigger and cam/vvt input.
813  *
814  * enable logic_level_trigger
815  offset 188 bit 20 */
817  /**
818  offset 188 bit 21 */
819  bool useTLE8888_stepper : 1 {};
820  /**
821  offset 188 bit 22 */
823  /**
824  * Print incoming and outgoing first bus CAN messages in rusEFI console
825  offset 188 bit 23 */
826  bool verboseCan : 1 {};
827  /**
828  * Experimental setting that will cause a misfire
829  * DO NOT ENABLE.
830  offset 188 bit 24 */
831  bool artificialTestMisfire : 1 {};
832  /**
833  * 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.
834  offset 188 bit 25 */
835  bool useFordRedundantPps : 1 {};
836  /**
837  offset 188 bit 26 */
838  bool cltSensorPulldown : 1 {};
839  /**
840  offset 188 bit 27 */
841  bool iatSensorPulldown : 1 {};
842  /**
843  offset 188 bit 28 */
844  bool allowIdenticalPps : 1 {};
845  /**
846  offset 188 bit 29 */
847  bool overrideVvtTriggerGaps : 1 {};
848  /**
849  * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
850  offset 188 bit 30 */
851  bool useSpiImu : 1 {};
852  /**
853  offset 188 bit 31 */
854  bool enableStagedInjection : 1 {};
855  /**
856  * Closed throttle, 1 volt = 200 units.
857  * See also tps1_1AdcChannel
858  * set tps_min X
859  * units: ADC
860  * offset 192
861  */
862  int16_t tpsMin;
863  /**
864  * Full throttle.
865  * See also tps1_1AdcChannel
866  * set tps_max X
867  * units: ADC
868  * offset 194
869  */
870  int16_t tpsMax;
871  /**
872  * TPS error detection: what throttle % is unrealistically low?
873  * Also used for accelerator pedal error detection if so equipped.
874  * units: %
875  * offset 196
876  */
877  int16_t tpsErrorDetectionTooLow;
878  /**
879  * TPS error detection: what throttle % is unrealistically high?
880  * Also used for accelerator pedal error detection if so equipped.
881  * units: %
882  * offset 198
883  */
884  int16_t tpsErrorDetectionTooHigh;
885  /**
886  * offset 200
887  */
889  /**
890  * Dwell duration while cranking
891  * units: ms
892  * offset 208
893  */
895  /**
896  * Once engine speed passes this value, start reducing ETB angle.
897  * units: rpm
898  * offset 212
899  */
900  uint16_t etbRevLimitStart;
901  /**
902  * 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.
903  * units: rpm
904  * offset 214
905  */
906  uint16_t etbRevLimitRange;
907  /**
908  * @see isMapAveragingEnabled
909  * offset 216
910  */
912  /**
913  * todo: merge with channel settings, use full-scale Thermistor here!
914  * offset 356
915  */
917  /**
918  * offset 388
919  */
921  /**
922  * units: deg
923  * offset 420
924  */
925  float launchTimingRetard;
926  /**
927  * value '6' for 8MHz hw osc
928  * read hip9011 datasheet for details
929  * todo split into two bit fields
930  * units: integer
931  * offset 424
932  */
934  /**
935  * Use any online calculator and input your bore.
936  * Reminder that in some cases double frequency works better!
937  * units: kHz
938  * offset 428
939  */
940  float knockBandCustom;
941  /**
942  * Engine displacement in litres
943  * units: L
944  * offset 432
945  */
946  scaled_channel<uint16_t, 1000, 1> displacement;
947  /**
948  * units: RPM
949  * offset 434
950  */
951  uint16_t triggerSimulatorRpm;
952  /**
953  * Number of cylinder the engine has.
954  * offset 436
955  */
956  uint32_t cylindersCount;
957  /**
958  * offset 440
959  */
961  /**
962  * offset 441
963  */
964  uint8_t justATempTest;
965  /**
966  * offset 442
967  */
969  /**
970  * Cylinder diameter in mm.
971  * units: mm
972  * offset 444
973  */
974  float cylinderBore;
975  /**
976  * This setting controls which fuel quantity control algorithm is used.
977  * Alpha-N means drive by TPS commonly only used for NA engines
978  * Speed Density requires MAP sensor and is the default choice for may installs
979  * MAF air charge is a cylinder filling based method that uses a mass air flow sensor.
980  * offset 448
981  */
983  /**
984  * units: %
985  * offset 449
986  */
987  uint8_t ALSMaxTPS;
988  /**
989  * This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous".
990  * offset 450
991  */
993  /**
994  * 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.
995  * offset 451
996  */
998  /**
999  * Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1000  * offset 452
1001  */
1002  uint16_t boostControlMinRpm;
1003  /**
1004  * Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1005  * offset 454
1006  */
1007  uint8_t boostControlMinTps;
1008  /**
1009  * Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1010  * offset 455
1011  */
1012  uint8_t boostControlMinMap;
1013  /**
1014  * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.
1015  * There is tapering towards running timing advance
1016  * set cranking_timing_angle X
1017  * units: deg
1018  * offset 456
1019  */
1021  /**
1022  * Single coil = distributor
1023  * Individual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode
1024  * Wasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder
1025  * Two distributors = A pair of distributors, found on some BMW, Toyota and other engines
1026  * set ignition_mode X
1027  * offset 460
1028  */
1030  /**
1031  * How many consecutive gap rations have to match expected ranges for sync to happen
1032  * units: count
1033  * offset 461
1034  */
1036  /**
1037  * Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).
1038  * units: kph
1039  * offset 462
1040  */
1041  uint8_t maxIdleVss;
1042  /**
1043  * offset 463
1044  */
1045  uint8_t camDecoder2jzPrecision;
1046  /**
1047  * 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.
1048  * units: kPa
1049  * offset 464
1050  */
1051  uint16_t minOilPressureAfterStart;
1052  /**
1053  * Dynamic uses the timing map to decide the ignition timing
1054  * Static timing fixes the timing to the value set below (only use for checking static timing with a timing light).
1055  * offset 466
1056  */
1058  /**
1059  * set can_mode X
1060  * offset 467
1061  */
1063  /**
1064  * This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing
1065  * This mode is useful when adjusting distributor location.
1066  * units: RPM
1067  * offset 468
1068  */
1070  /**
1071  * Angle between Top Dead Center (TDC) and the first trigger event.
1072  * Positive value in case of synchronization point before TDC and negative in case of synchronization point after TDC
1073  * .Knowing this angle allows us to control timing and other angles in reference to TDC.
1074  * HOWTO:
1075  * 1: Switch to fixed timing mode on 'ignition setting' dialog
1076  * 2: use an actual timing light to calibrate
1077  * 3: add/subtract until timing light confirms desired fixed timing value!'
1078  * units: deg btdc
1079  * offset 472
1080  */
1082  /**
1083  * 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.
1084  * units: coef
1085  * offset 476
1086  */
1088  /**
1089  * 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.
1090  * units: coef
1091  * offset 480
1092  */
1093  float vbattDividerCoeff;
1094  /**
1095  * Cooling fan turn-on temperature threshold, in Celsius
1096  * units: deg C
1097  * offset 484
1098  */
1099  float fanOnTemperature;
1100  /**
1101  * Cooling fan turn-off temperature threshold, in Celsius
1102  * units: deg C
1103  * offset 488
1104  */
1105  float fanOffTemperature;
1106  /**
1107  * offset 492
1108  */
1110  /**
1111  * need 4 byte alignment
1112  * units: units
1113  * offset 494
1114  */
1115  uint8_t alignmentFill_at_494[2];
1116  /**
1117  * 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.
1118  * units: revs/km
1119  * offset 496
1120  */
1121  float driveWheelRevPerKm;
1122  /**
1123  * CANbus thread period in ms
1124  * units: ms
1125  * offset 500
1126  */
1127  int canSleepPeriodMs;
1128  /**
1129  * units: index
1130  * offset 504
1131  */
1132  int byFirmwareVersion;
1133  /**
1134  * First throttle body, first sensor. See also pedalPositionAdcChannel
1135  * offset 508
1136  */
1138  /**
1139  * 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.
1140  * offset 509
1141  */
1143  /**
1144  * 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.
1145  * offset 510
1146  */
1148  /**
1149  * Second throttle body position sensor, single channel so far
1150  * offset 511
1151  */
1153  /**
1154  * 0.1 is a good default value
1155  * units: x
1156  * offset 512
1157  */
1159  /**
1160  * just a temporary solution
1161  * units: angle
1162  * offset 516
1163  */
1164  int trailingSparkAngle;
1165  /**
1166  * offset 520
1167  */
1169  /**
1170  * Extra air taper amount
1171  * units: %
1172  * offset 532
1173  */
1174  float airByRpmTaper;
1175  /**
1176  * offset 536
1177  */
1179  /**
1180  * 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.
1181  * units: %
1182  * offset 537
1183  */
1184  uint8_t boostControlSafeDutyCycle;
1185  /**
1186  * offset 538
1187  */
1189  /**
1190  * offset 539
1191  */
1192  uint8_t acrRevolutions;
1193  /**
1194  * offset 540
1195  */
1196  int calibrationBirthday;
1197  /**
1198  * units: volts
1199  * offset 544
1200  */
1201  float adcVcc;
1202  /**
1203  * units: Deg
1204  * offset 548
1205  */
1207  /**
1208  * 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.
1209  * offset 552
1210  */
1211  brain_input_pin_e camInputs[CAM_INPUTS_COUNT];
1212  /**
1213  * offset 560
1214  */
1215  afr_sensor_s afr;
1216  /**
1217  * Electronic throttle pedal position first channel
1218  * See throttlePedalPositionSecondAdcChannel for second channel
1219  * See also tps1_1AdcChannel
1220  * set_analog_input_pin pps X
1221  * See throttlePedalUpVoltage and throttlePedalWOTVoltage
1222  * offset 580
1223  */
1225  /**
1226  * TPS/PPS error threshold
1227  * units: %
1228  * offset 581
1229  */
1230  scaled_channel<uint8_t, 10, 1> etbSplit;
1231  /**
1232  * offset 582
1233  */
1234  Gpio tle6240_cs;
1235  /**
1236  * offset 584
1237  */
1239  /**
1240  * offset 585
1241  */
1243  /**
1244  * Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata
1245  * offset 586
1246  */
1248  /**
1249  * @see hasBaroSensor
1250  * offset 588
1251  */
1253  /**
1254  * offset 600
1255  */
1257  /**
1258  * Ignition timing to remove when a knock event occurs.
1259  * units: %
1260  * offset 612
1261  */
1262  scaled_channel<uint8_t, 10, 1> knockRetardAggression;
1263  /**
1264  * After a knock event, reapply timing at this rate.
1265  * units: deg/s
1266  * offset 613
1267  */
1268  scaled_channel<uint8_t, 10, 1> knockRetardReapplyRate;
1269  /**
1270  * Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync.
1271  * offset 614
1272  */
1274  /**
1275  * offset 615
1276  */
1278  /**
1279  * 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.
1280  * units: ratio
1281  * offset 616
1282  */
1283  scaled_channel<uint16_t, 1000, 1> vssGearRatio;
1284  /**
1285  * Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response.
1286  * offset 618
1287  */
1288  uint8_t vssFilterReciprocal;
1289  /**
1290  * 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.
1291  * units: count
1292  * offset 619
1293  */
1294  uint8_t vssToothCount;
1295  /**
1296  * Override the Y axis (load) value used for only the Idle VE table.
1297  * Advanced users only: If you aren't sure you need this, you probably don't need this.
1298  * offset 620
1299  */
1301  /**
1302  * need 4 byte alignment
1303  * units: units
1304  * offset 621
1305  */
1306  uint8_t alignmentFill_at_621[1];
1307  /**
1308  * offset 622
1309  */
1310  Gpio l9779_cs;
1311  /**
1312  * offset 624
1313  */
1314  output_pin_e injectionPins[MAX_CYLINDER_COUNT];
1315  /**
1316  * offset 648
1317  */
1318  output_pin_e ignitionPins[MAX_CYLINDER_COUNT];
1319  /**
1320  * offset 672
1321  */
1323  /**
1324  * offset 673
1325  */
1327  /**
1328  * offset 674
1329  */
1331  /**
1332  * offset 676
1333  */
1335  /**
1336  * How many consecutive VVT gap rations have to match expected ranges for sync to happen
1337  * units: count
1338  * offset 677
1339  */
1341  /**
1342  * Check engine light, also malfunction indicator light. Always blinks once on boot.
1343  * offset 678
1344  */
1346  /**
1347  * offset 680
1348  */
1350  /**
1351  * offset 681
1352  */
1354  /**
1355  * offset 682
1356  */
1358  /**
1359  * Some cars have a switch to indicate that clutch pedal is all the way down
1360  * offset 684
1361  */
1363  /**
1364  * offset 686
1365  */
1367  /**
1368  * offset 688
1369  */
1371  /**
1372  * offset 689
1373  */
1375  /**
1376  * offset 690
1377  */
1378  Gpio digitalPotentiometerChipSelect[DIGIPOT_COUNT];
1379  /**
1380  * offset 698
1381  */
1383  /**
1384  * offset 699
1385  */
1387  /**
1388  * offset 700
1389  */
1391  /**
1392  * Digital Potentiometer is used by stock ECU stimulation code
1393  * offset 702
1394  */
1396  /**
1397  * offset 703
1398  */
1400  /**
1401  * offset 704
1402  */
1403  Gpio mc33972_cs;
1404  /**
1405  * offset 706
1406  */
1408  /**
1409  * Useful in Research&Development phase
1410  * offset 707
1411  */
1413  /**
1414  * First throttle body, second sensor.
1415  * offset 708
1416  */
1418  /**
1419  * Second throttle body, second sensor.
1420  * offset 709
1421  */
1423  /**
1424  * Electronic throttle pedal position input
1425  * Second channel
1426  * See also tps1_1AdcChannel
1427  * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
1428  * offset 710
1429  */
1431  /**
1432  * AFR, WBO, EGO - whatever you like to call it
1433  * offset 711
1434  */
1436  /**
1437  * offset 712
1438  */
1439  Gpio mc33810_cs[C_MC33810_COUNT];
1440  /**
1441  * need 4 byte alignment
1442  * units: units
1443  * offset 714
1444  */
1445  uint8_t alignmentFill_at_714[2];
1446  /**
1447  * 0.1 is a good default value
1448  * units: x
1449  * offset 716
1450  */
1451  float idle_antiwindupFreq;
1452  /**
1453  * offset 720
1454  */
1455  brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT];
1456  /**
1457  * 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.
1458  * units: us
1459  * offset 724
1460  */
1461  uint16_t mc33_t_min_boost;
1462  /**
1463  * offset 726
1464  */
1466  /**
1467  * offset 727
1468  */
1470  /**
1471  * Ratio between the wheels and your transmission output.
1472  * units: ratio
1473  * offset 728
1474  */
1475  scaled_channel<uint16_t, 100, 1> finalGearRatio;
1476  /**
1477  * offset 730
1478  */
1480  /**
1481  * offset 732
1482  */
1483  uint8_t tcuInputSpeedSensorTeeth;
1484  /**
1485  * need 4 byte alignment
1486  * units: units
1487  * offset 733
1488  */
1489  uint8_t alignmentFill_at_733[1];
1490  /**
1491  * 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.
1492  * See also directSelfStimulation which is different.
1493  * offset 734
1494  */
1495  Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT];
1496  /**
1497  * units: g/s
1498  * offset 738
1499  */
1500  scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
1501  /**
1502  * offset 740
1503  */
1504  pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT];
1505  /**
1506  * offset 742
1507  */
1509  /**
1510  * need 4 byte alignment
1511  * units: units
1512  * offset 743
1513  */
1514  uint8_t alignmentFill_at_743[1];
1515  /**
1516  * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
1517  * offset 744
1518  */
1520  /**
1521  * offset 746
1522  */
1524  /**
1525  * units: RPM
1526  * offset 747
1527  */
1528  scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
1529  /**
1530  * units: %
1531  * offset 748
1532  */
1533  scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
1534  /**
1535  * need 4 byte alignment
1536  * units: units
1537  * offset 749
1538  */
1539  uint8_t alignmentFill_at_749[3];
1540  /**
1541  offset 752 bit 0 */
1542  bool is_enabled_spi_1 : 1 {};
1543  /**
1544  offset 752 bit 1 */
1545  bool is_enabled_spi_2 : 1 {};
1546  /**
1547  offset 752 bit 2 */
1548  bool is_enabled_spi_3 : 1 {};
1549  /**
1550  * enable sd/disable sd
1551  offset 752 bit 3 */
1552  bool isSdCardEnabled : 1 {};
1553  /**
1554  * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
1555  offset 752 bit 4 */
1556  bool rusefiVerbose29b : 1 {};
1557  /**
1558  offset 752 bit 5 */
1559  bool rethrowHardFault : 1 {};
1560  /**
1561  offset 752 bit 6 */
1562  bool isHip9011Enabled : 1 {};
1563  /**
1564  offset 752 bit 7 */
1565  bool requireFootOnBrakeToCrank : 1 {};
1566  /**
1567  offset 752 bit 8 */
1568  bool verboseQuad : 1 {};
1569  /**
1570  * This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed.
1571  offset 752 bit 9 */
1572  bool useStepperIdle : 1 {};
1573  /**
1574  offset 752 bit 10 */
1575  bool enabledStep1Limiter : 1 {};
1576  /**
1577  offset 752 bit 11 */
1578  bool useTpicAdvancedMode : 1 {};
1579  /**
1580  offset 752 bit 12 */
1581  bool lambdaProtectionEnable : 1 {};
1582  /**
1583  offset 752 bit 13 */
1584  bool verboseTLE8888 : 1 {};
1585  /**
1586  * CAN broadcast using custom rusEFI protocol
1587  * enable can_broadcast/disable can_broadcast
1588  offset 752 bit 14 */
1589  bool enableVerboseCanTx : 1 {};
1590  /**
1591  offset 752 bit 15 */
1592  bool etb1configured : 1 {};
1593  /**
1594  offset 752 bit 16 */
1595  bool etb2configured : 1 {};
1596  /**
1597  * Useful for individual intakes
1598  offset 752 bit 17 */
1599  bool measureMapOnlyInOneCylinder : 1 {};
1600  /**
1601  offset 752 bit 18 */
1602  bool stepperForceParkingEveryRestart : 1 {};
1603  /**
1604  * 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.
1605  offset 752 bit 19 */
1606  bool isFasterEngineSpinUpEnabled : 1 {};
1607  /**
1608  * This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing.
1609  offset 752 bit 20 */
1610  bool coastingFuelCutEnabled : 1 {};
1611  /**
1612  * 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.
1613  offset 752 bit 21 */
1614  bool useIacTableForCoasting : 1 {};
1615  /**
1616  offset 752 bit 22 */
1617  bool useNoiselessTriggerDecoder : 1 {};
1618  /**
1619  offset 752 bit 23 */
1620  bool useIdleTimingPidControl : 1 {};
1621  /**
1622  * 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.
1623  offset 752 bit 24 */
1624  bool disableEtbWhenEngineStopped : 1 {};
1625  /**
1626  offset 752 bit 25 */
1627  bool is_enabled_spi_4 : 1 {};
1628  /**
1629  * Disable the electronic throttle motor and DC idle motor for testing.
1630  * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle.
1631  offset 752 bit 26 */
1632  bool pauseEtbControl : 1 {};
1633  /**
1634  offset 752 bit 27 */
1635  bool unusedAlign : 1 {};
1636  /**
1637  offset 752 bit 28 */
1638  bool verboseKLine : 1 {};
1639  /**
1640  offset 752 bit 29 */
1641  bool idleIncrementalPidCic : 1 {};
1642  /**
1643  * AEM X-Series or rusEFI Wideband
1644  offset 752 bit 30 */
1645  bool enableAemXSeries : 1 {};
1646  /**
1647  offset 752 bit 31 */
1648  bool unused32nd : 1 {};
1649  /**
1650  * offset 756
1651  */
1652  brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT];
1653  /**
1654  * offset 764
1655  */
1657  /**
1658  * need 4 byte alignment
1659  * units: units
1660  * offset 765
1661  */
1662  uint8_t alignmentFill_at_765[1];
1663  /**
1664  * offset 766
1665  */
1667  /**
1668  * offset 768
1669  */
1671  /**
1672  * offset 770
1673  */
1675  /**
1676  * need 4 byte alignment
1677  * units: units
1678  * offset 771
1679  */
1680  uint8_t alignmentFill_at_771[1];
1681  /**
1682  * offset 772
1683  */
1684  uint32_t verboseCanBaseAddress;
1685  /**
1686  * Boost Voltage
1687  * units: v
1688  * offset 776
1689  */
1690  uint8_t mc33_hvolt;
1691  /**
1692  * Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost.
1693  * units: kPa
1694  * offset 777
1695  */
1696  uint8_t minimumBoostClosedLoopMap;
1697  /**
1698  * offset 778
1699  */
1700  uint16_t unusedacFanPin;
1701  /**
1702  * offset 780
1703  */
1705  /**
1706  * offset 781
1707  */
1709  /**
1710  * offset 782
1711  */
1713  /**
1714  * need 4 byte alignment
1715  * units: units
1716  * offset 783
1717  */
1718  uint8_t alignmentFill_at_783[1];
1719  /**
1720  * units: kg
1721  * offset 784
1722  */
1723  uint16_t vehicleWeight;
1724  /**
1725  * How far above idle speed do we consider idling, i.e. coasting detection threshold.
1726  * For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.
1727  * units: RPM
1728  * offset 786
1729  */
1730  int16_t idlePidRpmUpperLimit;
1731  /**
1732  * Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment.
1733  * units: ms
1734  * offset 788
1735  */
1736  scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
1737  /**
1738  * offset 790
1739  */
1741  /**
1742  * offset 792
1743  */
1745  /**
1746  * offset 794
1747  */
1749  /**
1750  * Some vehicles have a switch to indicate that clutch pedal is all the way up
1751  * offset 796
1752  */
1754  /**
1755  * offset 798
1756  */
1758  /**
1759  * offset 799
1760  */
1762  /**
1763  * offset 800
1764  */
1765  Gpio max31855_cs[EGT_CHANNEL_COUNT];
1766  /**
1767  * Continental/GM flex fuel sensor, 50-150hz type
1768  * offset 816
1769  */
1771  /**
1772  * offset 818
1773  */
1774  Gpio test557pin;
1775  /**
1776  * offset 820
1777  */
1779  /**
1780  * offset 821
1781  */
1783  /**
1784  * Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0
1785  * units: :1
1786  * offset 822
1787  */
1788  scaled_channel<uint8_t, 10, 1> stoichRatioSecondary;
1789  /**
1790  * Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open.
1791  * units: %
1792  * offset 823
1793  */
1794  uint8_t etbMaximumPosition;
1795  /**
1796  * Rate the ECU will log to the SD card, in hz (log lines per second).
1797  * units: hz
1798  * offset 824
1799  */
1800  uint16_t sdCardLogFrequency;
1801  /**
1802  * offset 826
1803  */
1805  /**
1806  * need 4 byte alignment
1807  * units: units
1808  * offset 827
1809  */
1810  uint8_t alignmentFill_at_827[1];
1811  /**
1812  * offset 828
1813  */
1814  uint16_t unusedHere;
1815  /**
1816  * offset 830
1817  */
1819  /**
1820  * On some vehicles we can disable starter once engine is already running
1821  * offset 832
1822  */
1824  /**
1825  * need 4 byte alignment
1826  * units: units
1827  * offset 833
1828  */
1829  uint8_t alignmentFill_at_833[1];
1830  /**
1831  * Some Subaru and some Mazda use double-solenoid idle air valve
1832  * offset 834
1833  */
1835  /**
1836  * See also starterControlPin
1837  * offset 836
1838  */
1840  /**
1841  * units: RPM
1842  * offset 838
1843  */
1844  scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
1845  /**
1846  * offset 839
1847  */
1849  /**
1850  * 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.
1851  * units: count
1852  * offset 840
1853  */
1854  int mapMinBufferLength;
1855  /**
1856  * 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%.
1857  * units: %
1858  * offset 844
1859  */
1861  /**
1862  * units: %
1863  * offset 846
1864  */
1865  int16_t stepperParkingExtraSteps;
1866  /**
1867  * units: ADC
1868  * offset 848
1869  */
1870  uint16_t tps1SecondaryMin;
1871  /**
1872  * units: ADC
1873  * offset 850
1874  */
1875  uint16_t tps1SecondaryMax;
1876  /**
1877  * units: rpm
1878  * offset 852
1879  */
1880  int16_t antiLagRpmTreshold;
1881  /**
1882  * Maximum time to crank starter when start/stop button is pressed
1883  * units: Seconds
1884  * offset 854
1885  */
1886  uint16_t startCrankingDuration;
1887  /**
1888  * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
1889  * offset 856
1890  */
1892  /**
1893  * offset 858
1894  */
1896  /**
1897  * need 4 byte alignment
1898  * units: units
1899  * offset 859
1900  */
1901  uint8_t alignmentFill_at_859[1];
1902  /**
1903  * offset 860
1904  */
1906  /**
1907  * units: %
1908  * offset 862
1909  */
1910  uint8_t lambdaProtectionMinTps;
1911  /**
1912  * Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed
1913  * units: s
1914  * offset 863
1915  */
1916  scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
1917  /**
1918  * offset 864
1919  */
1920  script_setting_t scriptSetting[SCRIPT_SETTING_COUNT];
1921  /**
1922  * offset 896
1923  */
1924  Gpio spi1mosiPin;
1925  /**
1926  * offset 898
1927  */
1928  Gpio spi1misoPin;
1929  /**
1930  * offset 900
1931  */
1932  Gpio spi1sckPin;
1933  /**
1934  * offset 902
1935  */
1936  Gpio spi2mosiPin;
1937  /**
1938  * offset 904
1939  */
1940  Gpio spi2misoPin;
1941  /**
1942  * offset 906
1943  */
1944  Gpio spi2sckPin;
1945  /**
1946  * offset 908
1947  */
1948  Gpio spi3mosiPin;
1949  /**
1950  * offset 910
1951  */
1952  Gpio spi3misoPin;
1953  /**
1954  * offset 912
1955  */
1956  Gpio spi3sckPin;
1957  /**
1958  * Saab Combustion Detection Module knock signal input pin
1959  * also known as Saab Ion Sensing Module
1960  * offset 914
1961  */
1962  Gpio cdmInputPin;
1963  /**
1964  * offset 916
1965  */
1967  /**
1968  * rusEFI console Sensor Sniffer mode
1969  * offset 917
1970  */
1972  /**
1973  * offset 918
1974  */
1976  /**
1977  * need 4 byte alignment
1978  * units: units
1979  * offset 919
1980  */
1981  uint8_t alignmentFill_at_919[1];
1982  /**
1983  offset 920 bit 0 */
1984  bool clutchUpPinInverted : 1 {};
1985  /**
1986  offset 920 bit 1 */
1987  bool clutchDownPinInverted : 1 {};
1988  /**
1989  * If enabled we use two H-bridges to drive stepper idle air valve
1990  offset 920 bit 2 */
1991  bool useHbridgesToDriveIdleStepper : 1 {};
1992  /**
1993  offset 920 bit 3 */
1994  bool multisparkEnable : 1 {};
1995  /**
1996  offset 920 bit 4 */
1997  bool enableLaunchRetard : 1 {};
1998  /**
1999  offset 920 bit 5 */
2000  bool canInputBCM : 1 {};
2001  /**
2002  * This property is useful if using rusEFI as TCM or BCM only
2003  offset 920 bit 6 */
2004  bool consumeObdSensors : 1 {};
2005  /**
2006  * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
2007  offset 920 bit 7 */
2008  bool enableCanVss : 1 {};
2009  /**
2010  offset 920 bit 8 */
2011  bool enableInnovateLC2 : 1 {};
2012  /**
2013  offset 920 bit 9 */
2014  bool showHumanReadableWarning : 1 {};
2015  /**
2016  * 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.
2017  offset 920 bit 10 */
2018  bool stftIgnoreErrorMagnitude : 1 {};
2019  /**
2020  offset 920 bit 11 */
2021  bool vvtBooleanForVerySpecialCases : 1 {};
2022  /**
2023  offset 920 bit 12 */
2024  bool enableSoftwareKnock : 1 {};
2025  /**
2026  * Verbose info in console below engineSnifferRpmThreshold
2027  * enable vvt_details
2028  offset 920 bit 13 */
2029  bool verboseVVTDecoding : 1 {};
2030  /**
2031  offset 920 bit 14 */
2032  bool invertCamVVTSignal : 1 {};
2033  /**
2034  * In Alpha-N mode, compensate for air temperature.
2035  offset 920 bit 15 */
2036  bool alphaNUseIat : 1 {};
2037  /**
2038  offset 920 bit 16 */
2039  bool knockBankCyl1 : 1 {};
2040  /**
2041  offset 920 bit 17 */
2042  bool knockBankCyl2 : 1 {};
2043  /**
2044  offset 920 bit 18 */
2045  bool knockBankCyl3 : 1 {};
2046  /**
2047  offset 920 bit 19 */
2048  bool knockBankCyl4 : 1 {};
2049  /**
2050  offset 920 bit 20 */
2051  bool knockBankCyl5 : 1 {};
2052  /**
2053  offset 920 bit 21 */
2054  bool knockBankCyl6 : 1 {};
2055  /**
2056  offset 920 bit 22 */
2057  bool knockBankCyl7 : 1 {};
2058  /**
2059  offset 920 bit 23 */
2060  bool knockBankCyl8 : 1 {};
2061  /**
2062  offset 920 bit 24 */
2063  bool knockBankCyl9 : 1 {};
2064  /**
2065  offset 920 bit 25 */
2066  bool knockBankCyl10 : 1 {};
2067  /**
2068  offset 920 bit 26 */
2069  bool knockBankCyl11 : 1 {};
2070  /**
2071  offset 920 bit 27 */
2072  bool knockBankCyl12 : 1 {};
2073  /**
2074  offset 920 bit 28 */
2075  bool tcuEnabled : 1 {};
2076  /**
2077  offset 920 bit 29 */
2078  bool canBroadcastUseChannelTwo : 1 {};
2079  /**
2080  * If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils
2081  offset 920 bit 30 */
2082  bool useRawOutputToDriveIdleStepper : 1 {};
2083  /**
2084  * Print incoming and outgoing second bus CAN messages in rusEFI console
2085  offset 920 bit 31 */
2086  bool verboseCan2 : 1 {};
2087  /**
2088  * offset 924
2089  */
2090  dc_io etbIo[ETB_COUNT];
2091  /**
2092  * Wastegate control Solenoid
2093  * offset 940
2094  */
2096  /**
2097  * offset 942
2098  */
2100  /**
2101  * need 4 byte alignment
2102  * units: units
2103  * offset 943
2104  */
2105  uint8_t alignmentFill_at_943[1];
2106  /**
2107  * offset 944
2108  */
2110  /**
2111  * offset 946
2112  */
2114  /**
2115  * offset 948
2116  */
2117  pid_s boostPid;
2118  /**
2119  * offset 968
2120  */
2122  /**
2123  * offset 969
2124  */
2126  /**
2127  * offset 970
2128  */
2130  /**
2131  * units: Hz
2132  * offset 972
2133  */
2134  int boostPwmFrequency;
2135  /**
2136  * offset 976
2137  */
2139  /**
2140  * offset 977
2141  */
2143  /**
2144  * How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs.
2145  * units: sec
2146  * offset 978
2147  */
2148  scaled_channel<uint8_t, 20, 1> tpsAccelLookback;
2149  /**
2150  * 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.
2151  * units: sec
2152  * offset 979
2153  */
2154  scaled_channel<uint8_t, 10, 1> noFuelTrimAfterDfcoTime;
2155  /**
2156  * Launch disabled above this speed if setting is above zero
2157  * units: Kph
2158  * offset 980
2159  */
2161  /**
2162  * Starting Launch RPM window to activate (subtracts from Launch RPM)
2163  * units: RPM
2164  * offset 984
2165  */
2166  int launchRpmWindow;
2167  /**
2168  * offset 988
2169  */
2170  int unusedHere12;
2171  /**
2172  * offset 992
2173  */
2174  int unusedHere13;
2175  /**
2176  * offset 996
2177  */
2179  /**
2180  * offset 1000
2181  */
2182  float turbochargerFilter;
2183  /**
2184  * offset 1004
2185  */
2186  int launchTpsThreshold;
2187  /**
2188  * offset 1008
2189  */
2190  float launchActivateDelay;
2191  /**
2192  * offset 1012
2193  */
2194  stft_s stft;
2195  /**
2196  * offset 1036
2197  */
2198  dc_io stepperDcIo[DC_PER_STEPPER];
2199  /**
2200  * For example, BMW, GM or Chevrolet
2201  * REQUIRED for rusEFI Online
2202  * offset 1052
2203  */
2205  /**
2206  * For example, LS1 or NB2
2207  * REQUIRED for rusEFI Online
2208  * offset 1084
2209  */
2211  /**
2212  * For example, Hunchback or Orange Miata
2213  * Vehicle name has to be unique between your vehicles.
2214  * REQUIRED for rusEFI Online
2215  * offset 1116
2216  */
2218  /**
2219  * offset 1148
2220  */
2221  output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT];
2222  /**
2223  * offset 1160
2224  */
2225  dc_function_e etbFunctions[ETB_COUNT];
2226  /**
2227  * offset 1162
2228  */
2230  /**
2231  * need 4 byte alignment
2232  * units: units
2233  * offset 1163
2234  */
2235  uint8_t alignmentFill_at_1163[1];
2236  /**
2237  * offset 1164
2238  */
2239  Gpio drv8860_cs;
2240  /**
2241  * offset 1166
2242  */
2244  /**
2245  * need 4 byte alignment
2246  * units: units
2247  * offset 1167
2248  */
2249  uint8_t alignmentFill_at_1167[1];
2250  /**
2251  * offset 1168
2252  */
2254  /**
2255  * offset 1170
2256  */
2257  output_pin_e luaOutputPins[LUA_PWM_COUNT];
2258  /**
2259  * need 4 byte alignment
2260  * units: units
2261  * offset 1186
2262  */
2263  uint8_t alignmentFill_at_1186[2];
2264  /**
2265  * Angle between cam sensor and VVT zero position
2266  * units: value
2267  * offset 1188
2268  */
2269  float vvtOffsets[CAM_INPUTS_COUNT];
2270  /**
2271  * offset 1204
2272  */
2273  vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT];
2274  /**
2275  * offset 1236
2276  */
2277  gppwm_note_t gpPwmNote[GPPWM_CHANNELS];
2278  /**
2279  * units: ADC
2280  * offset 1300
2281  */
2282  uint16_t tps2SecondaryMin;
2283  /**
2284  * units: ADC
2285  * offset 1302
2286  */
2287  uint16_t tps2SecondaryMax;
2288  /**
2289  * Select which bus the wideband controller is attached to.
2290  offset 1304 bit 0 */
2291  bool widebandOnSecondBus : 1 {};
2292  /**
2293  * Enables lambda sensor closed loop feedback for fuelling.
2294  offset 1304 bit 1 */
2295  bool fuelClosedLoopCorrectionEnabled : 1 {};
2296  /**
2297  * 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.
2298  offset 1304 bit 2 */
2299  bool oddFireEngine : 1 {};
2300  /**
2301  offset 1304 bit 3 */
2302  bool boardUseTachPullUp : 1 {};
2303  /**
2304  offset 1304 bit 4 */
2305  bool boardUseTempPullUp : 1 {};
2306  /**
2307  offset 1304 bit 5 */
2308  bool yesUnderstandLocking : 1 {};
2309  /**
2310  * Sometimes we have a performance issue while printing error
2311  offset 1304 bit 6 */
2312  bool silentTriggerError : 1 {};
2313  /**
2314  offset 1304 bit 7 */
2315  bool useLinearCltSensor : 1 {};
2316  /**
2317  * enable can_read/disable can_read
2318  offset 1304 bit 8 */
2319  bool canReadEnabled : 1 {};
2320  /**
2321  * enable can_write/disable can_write. See also can1ListenMode
2322  offset 1304 bit 9 */
2323  bool canWriteEnabled : 1 {};
2324  /**
2325  offset 1304 bit 10 */
2326  bool useLinearIatSensor : 1 {};
2327  /**
2328  offset 1304 bit 11 */
2329  bool boardUse2stepPullDown : 1 {};
2330  /**
2331  * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
2332  offset 1304 bit 12 */
2333  bool tachPulseDurationAsDutyCycle : 1 {};
2334  /**
2335  * This enables smart alternator control and activates the extra alternator settings.
2336  offset 1304 bit 13 */
2337  bool isAlternatorControlEnabled : 1 {};
2338  /**
2339  * https://wiki.rusefi.com/Trigger-Configuration-Guide
2340  * This setting flips the signal from the primary engine speed sensor.
2341  offset 1304 bit 14 */
2342  bool invertPrimaryTriggerSignal : 1 {};
2343  /**
2344  * https://wiki.rusefi.com/Trigger-Configuration-Guide
2345  * This setting flips the signal from the secondary engine speed sensor.
2346  offset 1304 bit 15 */
2347  bool invertSecondaryTriggerSignal : 1 {};
2348  /**
2349  offset 1304 bit 16 */
2350  bool cutFuelOnHardLimit : 1 {};
2351  /**
2352  * Be careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer.
2353  offset 1304 bit 17 */
2354  bool cutSparkOnHardLimit : 1 {};
2355  /**
2356  offset 1304 bit 18 */
2357  bool launchFuelCutEnable : 1 {};
2358  /**
2359  * This is the Cut Mode normally used
2360  offset 1304 bit 19 */
2361  bool launchSparkCutEnable : 1 {};
2362  /**
2363  offset 1304 bit 20 */
2364  bool boardUseCrankPullUp : 1 {};
2365  /**
2366  offset 1304 bit 21 */
2367  bool boardUseCamPullDown : 1 {};
2368  /**
2369  offset 1304 bit 22 */
2370  bool boardUseCamVrPullUp : 1 {};
2371  /**
2372  offset 1304 bit 23 */
2373  bool boardUseD2PullDown : 1 {};
2374  /**
2375  offset 1304 bit 24 */
2376  bool boardUseD3PullDown : 1 {};
2377  /**
2378  offset 1304 bit 25 */
2379  bool boardUseD4PullDown : 1 {};
2380  /**
2381  offset 1304 bit 26 */
2382  bool boardUseD5PullDown : 1 {};
2383  /**
2384  * Are you a developer troubleshooting TS over CAN ISO/TP?
2385  offset 1304 bit 27 */
2386  bool verboseIsoTp : 1 {};
2387  /**
2388  offset 1304 bit 28 */
2389  bool engineSnifferFocusOnInputs : 1 {};
2390  /**
2391  offset 1304 bit 29 */
2392  bool launchActivateInverted : 1 {};
2393  /**
2394  offset 1304 bit 30 */
2395  bool twoStroke : 1 {};
2396  /**
2397  * Where is your primary skipped wheel located?
2398  offset 1304 bit 31 */
2399  bool skippedWheelOnCam : 1 {};
2400  /**
2401  * offset 1308
2402  */
2404  /**
2405  * need 4 byte alignment
2406  * units: units
2407  * offset 1309
2408  */
2409  uint8_t alignmentFill_at_1309[1];
2410  /**
2411  * A/C button input
2412  * offset 1310
2413  */
2415  /**
2416  * offset 1312
2417  */
2419  /**
2420  * Expected neutral position
2421  * units: %
2422  * offset 1313
2423  */
2424  uint8_t etbNeutralPosition;
2425  /**
2426  * See also idleRpmPid
2427  * offset 1314
2428  */
2430  /**
2431  * need 4 byte alignment
2432  * units: units
2433  * offset 1315
2434  */
2435  uint8_t alignmentFill_at_1315[1];
2436  /**
2437  offset 1316 bit 0 */
2438  bool isInjectionEnabled : 1 {};
2439  /**
2440  offset 1316 bit 1 */
2441  bool isIgnitionEnabled : 1 {};
2442  /**
2443  * When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders.
2444  offset 1316 bit 2 */
2445  bool isCylinderCleanupEnabled : 1 {};
2446  /**
2447  * Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?
2448  offset 1316 bit 3 */
2449  bool complexWallModel : 1 {};
2450  /**
2451  * RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution
2452  offset 1316 bit 4 */
2453  bool alwaysInstantRpm : 1 {};
2454  /**
2455  offset 1316 bit 5 */
2456  bool isMapAveragingEnabled : 1 {};
2457  /**
2458  * If enabled, use separate temperature multiplier table for cranking idle position.
2459  * If disabled, use normal running multiplier table applied to the cranking base position.
2460  offset 1316 bit 6 */
2461  bool overrideCrankingIacSetting : 1 {};
2462  /**
2463  * 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.
2464  offset 1316 bit 7 */
2465  bool useSeparateAdvanceForIdle : 1 {};
2466  /**
2467  offset 1316 bit 8 */
2468  bool isWaveAnalyzerEnabled : 1 {};
2469  /**
2470  * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
2471  offset 1316 bit 9 */
2472  bool useSeparateVeForIdle : 1 {};
2473  /**
2474  * Verbose info in console below engineSnifferRpmThreshold
2475  * enable trigger_details
2476  offset 1316 bit 10 */
2477  bool verboseTriggerSynchDetails : 1 {};
2478  /**
2479  * Usually if we have no trigger events that means engine is stopped
2480  * Unless we are troubleshooting and spinning the engine by hand - this case a longer
2481  * delay is needed
2482  offset 1316 bit 11 */
2483  bool isManualSpinningMode : 1 {};
2484  /**
2485  offset 1316 bit 12 */
2486  bool cutFuelInAcr : 1 {};
2487  /**
2488  offset 1316 bit 13 */
2489  bool hondaK : 1 {};
2490  /**
2491  * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
2492  offset 1316 bit 14 */
2493  bool twoWireBatchIgnition : 1 {};
2494  /**
2495  * Read MAP sensor on ECU start-up to use as baro value.
2496  offset 1316 bit 15 */
2497  bool useFixedBaroCorrFromMap : 1 {};
2498  /**
2499  * In Constant mode, timing is automatically tapered to running as RPM increases.
2500  * In Table mode, the "Cranking ignition advance" table is used directly.
2501  offset 1316 bit 16 */
2502  bool useSeparateAdvanceForCranking : 1 {};
2503  /**
2504  * This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle).
2505  * You probably don't need this.
2506  offset 1316 bit 17 */
2508  /**
2509  * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
2510  offset 1316 bit 18 */
2511  bool flexCranking : 1 {};
2512  /**
2513  * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
2514  offset 1316 bit 19 */
2515  bool useIacPidMultTable : 1 {};
2516  /**
2517  offset 1316 bit 20 */
2518  bool isBoostControlEnabled : 1 {};
2519  /**
2520  * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
2521  offset 1316 bit 21 */
2522  bool launchSmoothRetard : 1 {};
2523  /**
2524  * Some engines are OK running semi-random sequential while other engine require phase synchronization
2525  offset 1316 bit 22 */
2526  bool isPhaseSyncRequiredForIgnition : 1 {};
2527  /**
2528  * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
2529  offset 1316 bit 23 */
2530  bool useCltBasedRpmLimit : 1 {};
2531  /**
2532  * If enabled, don't wait for engine start to heat O2 sensors. WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
2533  offset 1316 bit 24 */
2534  bool forceO2Heating : 1 {};
2535  /**
2536  * 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'.
2537  offset 1316 bit 25 */
2538  bool invertVvtControlIntake : 1 {};
2539  /**
2540  * 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'.
2541  offset 1316 bit 26 */
2542  bool invertVvtControlExhaust : 1 {};
2543  /**
2544  offset 1316 bit 27 */
2545  bool useBiQuadOnAuxSpeedSensors : 1 {};
2546  /**
2547  * '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.
2548  offset 1316 bit 28 */
2549  bool sdTriggerLog : 1 {};
2550  /**
2551  offset 1316 bit 29 */
2552  bool ALSActivateInverted : 1 {};
2553  /**
2554  offset 1316 bit 30 */
2555  bool stepper_dc_use_two_wires : 1 {};
2556  /**
2557  offset 1316 bit 31 */
2558  bool watchOutForLinearTime : 1 {};
2559  /**
2560  * units: count
2561  * offset 1320
2562  */
2563  uint32_t engineChartSize;
2564  /**
2565  * units: mult
2566  * offset 1324
2567  */
2569  /**
2570  * offset 1328
2571  */
2572  Gpio camInputsDebug[CAM_INPUTS_COUNT];
2573  /**
2574  * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
2575  * units: RPM
2576  * offset 1336
2577  */
2578  int16_t acIdleRpmTarget;
2579  /**
2580  * set warningPeriod X
2581  * units: seconds
2582  * offset 1338
2583  */
2584  int16_t warningPeriod;
2585  /**
2586  * units: angle
2587  * offset 1340
2588  */
2590  /**
2591  * units: angle
2592  * offset 1344
2593  */
2595  /**
2596  * units: ms
2597  * offset 1348
2598  */
2600  /**
2601  * units: count
2602  * offset 1352
2603  */
2605  /**
2606  * TODO: finish this #413
2607  * units: sec
2608  * offset 1356
2609  */
2611  /**
2612  * At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback.
2613  * units: index
2614  * offset 1360
2615  */
2617  /**
2618  * Duration in ms or duty cycle depending on selected mode
2619  * offset 1364
2620  */
2621  float tachPulseDuractionMs;
2622  /**
2623  * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
2624  * units: Seconds
2625  * offset 1368
2626  */
2627  float wwaeTau;
2628  /**
2629  * offset 1372
2630  */
2632  /**
2633  * offset 1392
2634  */
2635  pid_s etb;
2636  /**
2637  * offset 1412
2638  */
2639  Gpio triggerInputDebugPins[TRIGGER_INPUT_PIN_COUNT];
2640  /**
2641  * RPM range above upper limit for extra air taper
2642  * units: RPM
2643  * offset 1416
2644  */
2645  int16_t airTaperRpmRange;
2646  /**
2647  * offset 1418
2648  */
2650  /**
2651  * Closed throttle#2. todo: extract these two fields into a structure
2652  * See also tps2_1AdcChannel
2653  * units: ADC
2654  * offset 1420
2655  */
2656  int16_t tps2Min;
2657  /**
2658  * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!
2659  * See also tps1_1AdcChannel
2660  * units: ADC
2661  * offset 1422
2662  */
2663  int16_t tps2Max;
2664  /**
2665  * See also startStopButtonPin
2666  * offset 1424
2667  */
2669  /**
2670  * offset 1426
2671  */
2673  /**
2674  * need 4 byte alignment
2675  * units: units
2676  * offset 1427
2677  */
2678  uint8_t alignmentFill_at_1427[1];
2679  /**
2680  * offset 1428
2681  */
2683  /**
2684  * units: Pulse
2685  * offset 1430
2686  */
2687  uint8_t tachPulsePerRev;
2688  /**
2689  * need 4 byte alignment
2690  * units: units
2691  * offset 1431
2692  */
2693  uint8_t alignmentFill_at_1431[1];
2694  /**
2695  * kPa value which is too low to be true
2696  * units: kPa
2697  * offset 1432
2698  */
2700  /**
2701  * kPa value which is too high to be true
2702  * units: kPa
2703  * offset 1436
2704  */
2706  /**
2707  * How long to wait for the spark to fire before recharging the coil for another spark.
2708  * units: ms
2709  * offset 1440
2710  */
2711  scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
2712  /**
2713  * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
2714  * units: ms
2715  * offset 1442
2716  */
2717  scaled_channel<uint16_t, 1000, 1> multisparkDwell;
2718  /**
2719  * See cltIdleRpmBins
2720  * offset 1444
2721  */
2722  pid_s idleRpmPid;
2723  /**
2724  * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
2725  * units: Fraction
2726  * offset 1464
2727  */
2728  float wwaeBeta;
2729  /**
2730  * See also EFI_CONSOLE_RX_BRAIN_PIN
2731  * offset 1468
2732  */
2734  /**
2735  * offset 1470
2736  */
2738  /**
2739  * offset 1472
2740  */
2741  Gpio auxValves[AUX_DIGITAL_VALVE_COUNT];
2742  /**
2743  * offset 1476
2744  */
2746  /**
2747  * offset 1478
2748  */
2750  /**
2751  * units: voltage
2752  * offset 1480
2753  */
2754  float throttlePedalUpVoltage;
2755  /**
2756  * Pedal in the floor
2757  * units: voltage
2758  * offset 1484
2759  */
2761  /**
2762  * on IGN voltage detection turn fuel pump on to build fuel pressure
2763  * units: seconds
2764  * offset 1488
2765  */
2766  int16_t startUpFuelPumpDuration;
2767  /**
2768  * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
2769  * units: RPM
2770  * offset 1490
2771  */
2772  int16_t idlePidRpmDeadZone;
2773  /**
2774  * This is the target battery voltage the alternator PID control will attempt to maintain
2775  * units: Volts
2776  * offset 1492
2777  */
2778  float targetVBatt;
2779  /**
2780  * See Over/Undervoltage Shutdown/Retry bit in documentation
2781  offset 1496 bit 0 */
2782  bool mc33810DisableRecoveryMode : 1 {};
2783  /**
2784  offset 1496 bit 1 */
2785  bool mc33810Gpgd0Mode : 1 {};
2786  /**
2787  offset 1496 bit 2 */
2788  bool mc33810Gpgd1Mode : 1 {};
2789  /**
2790  offset 1496 bit 3 */
2791  bool mc33810Gpgd2Mode : 1 {};
2792  /**
2793  offset 1496 bit 4 */
2794  bool mc33810Gpgd3Mode : 1 {};
2795  /**
2796  offset 1496 bit 5 */
2797  bool enableExtendedCanBroadcast : 1 {};
2798  /**
2799  offset 1496 bit 6 */
2800  bool luaCanRxWorkaround : 1 {};
2801  /**
2802  offset 1496 bit 7 */
2803  bool flexSensorInverted : 1 {};
2804  /**
2805  offset 1496 bit 8 */
2806  bool useHardSkipInTraction : 1 {};
2807  /**
2808  offset 1496 bit 9 */
2809  bool fancySmartS : 1 {};
2810  /**
2811  offset 1496 bit 10 */
2812  bool fancySmartL : 1 {};
2813  /**
2814  * Use Aux Speed 1 as one of speeds for wheel slip ratio?
2815  offset 1496 bit 11 */
2816  bool useAuxSpeedForSlipRatio : 1 {};
2817  /**
2818  * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
2819  offset 1496 bit 12 */
2820  bool useVssAsSecondWheelSpeed : 1 {};
2821  /**
2822  offset 1496 bit 13 */
2823  bool is_enabled_spi_5 : 1 {};
2824  /**
2825  offset 1496 bit 14 */
2826  bool is_enabled_spi_6 : 1 {};
2827  /**
2828  * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
2829  offset 1496 bit 15 */
2830  bool enableAemXSeriesEgt : 1 {};
2831  /**
2832  offset 1496 bit 16 */
2833  bool startRequestPinInverted : 1 {};
2834  /**
2835  offset 1496 bit 17 */
2836  bool tcu_rangeSensorPulldown : 1 {};
2837  /**
2838  offset 1496 bit 18 */
2839  bool skipBoardCanDash : 1 {};
2840  /**
2841  offset 1496 bit 19 */
2842  bool brakePedalPinInverted : 1 {};
2843  /**
2844  offset 1496 bit 20 */
2845  bool devBit0 : 1 {};
2846  /**
2847  offset 1496 bit 21 */
2848  bool devBit1 : 1 {};
2849  /**
2850  offset 1496 bit 22 */
2851  bool devBit2 : 1 {};
2852  /**
2853  offset 1496 bit 23 */
2854  bool devBit3 : 1 {};
2855  /**
2856  offset 1496 bit 24 */
2857  bool devBit4 : 1 {};
2858  /**
2859  offset 1496 bit 25 */
2860  bool devBit5 : 1 {};
2861  /**
2862  offset 1496 bit 26 */
2863  bool devBit6 : 1 {};
2864  /**
2865  offset 1496 bit 27 */
2866  bool devBit7 : 1 {};
2867  /**
2868  offset 1496 bit 28 */
2869  bool skipADC12bitAssert : 1 {};
2870  /**
2871  offset 1496 bit 29 */
2872  bool invertExhaustCamVVTSignal : 1 {};
2873  /**
2874  offset 1496 bit 30 */
2875  bool enableKnockSpectrogram : 1 {};
2876  /**
2877  offset 1496 bit 31 */
2878  bool unusedBit_515_31 : 1 {};
2879  /**
2880  * 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
2881  * units: cycles
2882  * offset 1500
2883  */
2885  /**
2886  * IAC Value added when coasting and transitioning into idle.
2887  * units: percent
2888  * offset 1502
2889  */
2890  int16_t iacByTpsTaper;
2891  /**
2892  * Auxiliary sensor serial, not to be confused with secondary calibration serial
2893  * offset 1504
2894  */
2896  /**
2897  * Auxiliary sensor serial, not to be confused with secondary calibration serial
2898  * offset 1506
2899  */
2901  /**
2902  * offset 1508
2903  */
2905  /**
2906  * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2907  * units: kph
2908  * offset 1510
2909  */
2910  uint8_t coastingFuelCutVssLow;
2911  /**
2912  * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2913  * units: kph
2914  * offset 1511
2915  */
2916  uint8_t coastingFuelCutVssHigh;
2917  /**
2918  * 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.
2919  * units: roc
2920  * offset 1512
2921  */
2923  /**
2924  * offset 1516
2925  */
2926  brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT];
2927  /**
2928  * offset 1520
2929  */
2930  uint8_t totalGearsCount;
2931  /**
2932  * Sets what part of injection's is controlled by the injection phase table.
2933  * offset 1521
2934  */
2936  /**
2937  * See http://rusefi.com/s/debugmode
2938  * offset 1522
2939  */
2941  /**
2942  * Additional idle % when fan #1 is active
2943  * units: %
2944  * offset 1523
2945  */
2946  uint8_t fan1ExtraIdle;
2947  /**
2948  * Band rate for primary TTL
2949  * units: BPs
2950  * offset 1524
2951  */
2952  uint32_t uartConsoleSerialSpeed;
2953  /**
2954  * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
2955  * units: roc
2956  * offset 1528
2957  */
2959  /**
2960  * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
2961  * units: coeff
2962  * offset 1532
2963  */
2965  /**
2966  * units: BPs
2967  * offset 1536
2968  */
2969  uint32_t auxSerialSpeed;
2970  /**
2971  * units: voltage
2972  * offset 1540
2973  */
2975  /**
2976  * Pedal in the floor
2977  * units: voltage
2978  * offset 1544
2979  */
2981  /**
2982  * set can_baudrate
2983  * offset 1548
2984  */
2986  /**
2987  * Override the Y axis (load) value used for the VE table.
2988  * Advanced users only: If you aren't sure you need this, you probably don't need this.
2989  * offset 1549
2990  */
2992  /**
2993  * offset 1550
2994  */
2996  /**
2997  * Override the Y axis (load) value used for the AFR table.
2998  * Advanced users only: If you aren't sure you need this, you probably don't need this.
2999  * offset 1551
3000  */
3002  /**
3003  * units: A
3004  * offset 1552
3005  */
3006  scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3007  /**
3008  * units: A
3009  * offset 1553
3010  */
3011  scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
3012  /**
3013  * How long to deactivate power when hold current is reached before applying power again
3014  * units: us
3015  * offset 1554
3016  */
3017  uint8_t mc33_hpfp_i_hold_off;
3018  /**
3019  * Maximum amount of time the solenoid can be active before assuming a programming error
3020  * units: ms
3021  * offset 1555
3022  */
3023  uint8_t mc33_hpfp_max_hold;
3024  /**
3025  * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
3026  offset 1556 bit 0 */
3027  bool stepperDcInvertedPins : 1 {};
3028  /**
3029  * Allow OpenBLT on Primary CAN
3030  offset 1556 bit 1 */
3031  bool canOpenBLT : 1 {};
3032  /**
3033  * Allow OpenBLT on Secondary CAN
3034  offset 1556 bit 2 */
3035  bool can2OpenBLT : 1 {};
3036  /**
3037  * Select whether to configure injector flow in volumetric flow (defualt, cc/min) or mass flow (g/s).
3038  offset 1556 bit 3 */
3039  bool injectorFlowAsMassFlow : 1 {};
3040  /**
3041  offset 1556 bit 4 */
3042  bool boardUseCanTerminator : 1 {};
3043  /**
3044  offset 1556 bit 5 */
3045  bool kLineDoHondaSend : 1 {};
3046  /**
3047  * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
3048  offset 1556 bit 6 */
3049  bool can1ListenMode : 1 {};
3050  /**
3051  offset 1556 bit 7 */
3052  bool can2ListenMode : 1 {};
3053  /**
3054  offset 1556 bit 8 */
3055  bool unusedBit_551_8 : 1 {};
3056  /**
3057  offset 1556 bit 9 */
3058  bool unusedBit_551_9 : 1 {};
3059  /**
3060  offset 1556 bit 10 */
3061  bool unusedBit_551_10 : 1 {};
3062  /**
3063  offset 1556 bit 11 */
3064  bool unusedBit_551_11 : 1 {};
3065  /**
3066  offset 1556 bit 12 */
3067  bool unusedBit_551_12 : 1 {};
3068  /**
3069  offset 1556 bit 13 */
3070  bool unusedBit_551_13 : 1 {};
3071  /**
3072  offset 1556 bit 14 */
3073  bool unusedBit_551_14 : 1 {};
3074  /**
3075  offset 1556 bit 15 */
3076  bool unusedBit_551_15 : 1 {};
3077  /**
3078  offset 1556 bit 16 */
3079  bool unusedBit_551_16 : 1 {};
3080  /**
3081  offset 1556 bit 17 */
3082  bool unusedBit_551_17 : 1 {};
3083  /**
3084  offset 1556 bit 18 */
3085  bool unusedBit_551_18 : 1 {};
3086  /**
3087  offset 1556 bit 19 */
3088  bool unusedBit_551_19 : 1 {};
3089  /**
3090  offset 1556 bit 20 */
3091  bool unusedBit_551_20 : 1 {};
3092  /**
3093  offset 1556 bit 21 */
3094  bool unusedBit_551_21 : 1 {};
3095  /**
3096  offset 1556 bit 22 */
3097  bool unusedBit_551_22 : 1 {};
3098  /**
3099  offset 1556 bit 23 */
3100  bool unusedBit_551_23 : 1 {};
3101  /**
3102  offset 1556 bit 24 */
3103  bool unusedBit_551_24 : 1 {};
3104  /**
3105  offset 1556 bit 25 */
3106  bool unusedBit_551_25 : 1 {};
3107  /**
3108  offset 1556 bit 26 */
3109  bool unusedBit_551_26 : 1 {};
3110  /**
3111  offset 1556 bit 27 */
3112  bool unusedBit_551_27 : 1 {};
3113  /**
3114  offset 1556 bit 28 */
3115  bool unusedBit_551_28 : 1 {};
3116  /**
3117  offset 1556 bit 29 */
3118  bool unusedBit_551_29 : 1 {};
3119  /**
3120  offset 1556 bit 30 */
3121  bool unusedBit_551_30 : 1 {};
3122  /**
3123  offset 1556 bit 31 */
3124  bool unusedBit_551_31 : 1 {};
3125  /**
3126  * offset 1560
3127  */
3128  uint8_t camDecoder2jzPosition;
3129  /**
3130  * offset 1561
3131  */
3133  /**
3134  * Duration of each test pulse
3135  * units: ms
3136  * offset 1562
3137  */
3138  scaled_channel<uint16_t, 100, 1> benchTestOnTime;
3139  /**
3140  * units: %
3141  * offset 1564
3142  */
3144  /**
3145  * units: %
3146  * offset 1565
3147  */
3148  scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
3149  /**
3150  * offset 1566
3151  */
3153  /**
3154  * need 4 byte alignment
3155  * units: units
3156  * offset 1567
3157  */
3158  uint8_t alignmentFill_at_1567[1];
3159  /**
3160  * set_can2_tx_pin X
3161  * offset 1568
3162  */
3163  Gpio can2TxPin;
3164  /**
3165  * set_can2_rx_pin X
3166  * offset 1570
3167  */
3168  Gpio can2RxPin;
3169  /**
3170  * offset 1572
3171  */
3173  /**
3174  * offset 1573
3175  */
3177  /**
3178  * Override the Y axis (load) value used for the ignition table.
3179  * Advanced users only: If you aren't sure you need this, you probably don't need this.
3180  * offset 1574
3181  */
3183  /**
3184  * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
3185  * offset 1575
3186  */
3188  /**
3189  * offset 1576
3190  */
3192  /**
3193  * offset 1578
3194  */
3196  /**
3197  * need 4 byte alignment
3198  * units: units
3199  * offset 1579
3200  */
3201  uint8_t alignmentFill_at_1579[1];
3202  /**
3203  * MAP value above which fuel is cut in case of overboost.
3204  * Set to 0 to disable overboost cut.
3205  * units: kPa (absolute)
3206  * offset 1580
3207  */
3208  float boostCutPressure;
3209  /**
3210  * units: kg/h
3211  * offset 1584
3212  */
3213  scaled_channel<uint8_t, 1, 5> tchargeBins[16];
3214  /**
3215  * units: ratio
3216  * offset 1600
3217  */
3218  scaled_channel<uint8_t, 100, 1> tchargeValues[16];
3219  /**
3220  * Fixed timing, useful for TDC testing
3221  * units: deg
3222  * offset 1616
3223  */
3224  float fixedTiming;
3225  /**
3226  * MAP voltage for low point
3227  * units: v
3228  * offset 1620
3229  */
3230  float mapLowValueVoltage;
3231  /**
3232  * MAP voltage for low point
3233  * units: v
3234  * offset 1624
3235  */
3236  float mapHighValueVoltage;
3237  /**
3238  * EGO value correction
3239  * units: value
3240  * offset 1628
3241  */
3242  float egoValueShift;
3243  /**
3244  * VVT output solenoid pin for this cam
3245  * offset 1632
3246  */
3247  output_pin_e vvtPins[CAM_INPUTS_COUNT];
3248  /**
3249  * This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling.
3250  * units: percent
3251  * offset 1640
3252  */
3253  int crankingIACposition;
3254  /**
3255  * offset 1644
3256  */
3257  float tChargeMinRpmMinTps;
3258  /**
3259  * offset 1648
3260  */
3261  float tChargeMinRpmMaxTps;
3262  /**
3263  * offset 1652
3264  */
3265  float tChargeMaxRpmMinTps;
3266  /**
3267  * offset 1656
3268  */
3269  float tChargeMaxRpmMaxTps;
3270  /**
3271  * offset 1660
3272  */
3274  /**
3275  * 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.
3276  * units: deg BTDC
3277  * offset 1662
3278  */
3279  int8_t minimumIgnitionTiming;
3280  /**
3281  * 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
3282  * units: deg BTDC
3283  * offset 1663
3284  */
3285  int8_t maximumIgnitionTiming;
3286  /**
3287  * units: Hz
3288  * offset 1664
3289  */
3291  /**
3292  * set vvt_mode X
3293  * offset 1668
3294  */
3295  vvt_mode_e vvtMode[CAMS_PER_BANK];
3296  /**
3297  * Additional idle % when fan #2 is active
3298  * units: %
3299  * offset 1670
3300  */
3301  uint8_t fan2ExtraIdle;
3302  /**
3303  * Delay to allow fuel pressure to build before firing the priming pulse.
3304  * units: sec
3305  * offset 1671
3306  */
3307  scaled_channel<uint8_t, 100, 1> primingDelay;
3308  /**
3309  * offset 1672
3310  */
3311  adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT];
3312  /**
3313  * offset 1680
3314  */
3315  output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT];
3316  /**
3317  * offset 1704
3318  */
3320  /**
3321  * offset 1705
3322  */
3324  /**
3325  * None = I have a MAP-referenced fuel pressure regulator
3326  * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
3327  * Sensed rail pressure = I have a fuel pressure sensor
3328  * offset 1706
3329  */
3331  /**
3332  * offset 1707
3333  */
3335  /**
3336  * This is the pressure at which your injector flow is known.
3337  * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
3338  * units: kPa
3339  * offset 1708
3340  */
3341  float fuelReferencePressure;
3342  /**
3343  * units: mult
3344  * offset 1712
3345  */
3346  float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT];
3347  /**
3348  * units: count
3349  * offset 1856
3350  */
3351  float postCrankingDurationBins[CRANKING_ENRICH_COUNT];
3352  /**
3353  * units: C
3354  * offset 1880
3355  */
3356  float postCrankingCLTBins[CRANKING_ENRICH_COUNT];
3357  /**
3358  * offset 1904
3359  */
3361  /**
3362  * offset 1936
3363  */
3365  /**
3366  * units: Deg
3367  * offset 1968
3368  */
3369  int16_t knockSamplingDuration;
3370  /**
3371  * units: Hz
3372  * offset 1970
3373  */
3374  int16_t etbFreq;
3375  /**
3376  * offset 1972
3377  */
3379  /**
3380  * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
3381  * offset 1992
3382  */
3384  /**
3385  * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
3386  * units: %
3387  * offset 1993
3388  */
3389  uint8_t stepperMinDutyCycle;
3390  /**
3391  * Use to limit the max.current through the stepper motor (100% = no limit)
3392  * units: %
3393  * offset 1994
3394  */
3395  uint8_t stepperMaxDutyCycle;
3396  /**
3397  * offset 1995
3398  */
3400  /**
3401  * per-cylinder ignition and fueling timing correction for uneven engines
3402  * units: deg
3403  * offset 1996
3404  */
3405  angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT];
3406  /**
3407  * units: seconds
3408  * offset 2044
3409  */
3410  float idlePidActivationTime;
3411  /**
3412  * offset 2048
3413  */
3415  /**
3416  * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
3417  * offset 2049
3418  */
3420  /**
3421  * offset 2050
3422  */
3424  /**
3425  * offset 2051
3426  */
3428  /**
3429  * offset 2052
3430  */
3432  /**
3433  * offset 2053
3434  */
3436  /**
3437  * offset 2054
3438  */
3440  /**
3441  * offset 2055
3442  */
3444  /**
3445  * offset 2056
3446  */
3448  /**
3449  * offset 2057
3450  */
3452  /**
3453  * ResetB
3454  * offset 2058
3455  */
3457  /**
3458  * offset 2060
3459  */
3461  /**
3462  * Brake pedal switch
3463  * offset 2062
3464  */
3466  /**
3467  * VVT output PID
3468  * TODO: rename to vvtPid
3469  * offset 2064
3470  */
3471  pid_s auxPid[CAMS_PER_BANK];
3472  /**
3473  * offset 2104
3474  */
3476  /**
3477  * units: C
3478  * offset 2136
3479  */
3480  int8_t primeBins[PRIME_CURVE_COUNT];
3481  /**
3482  * offset 2144
3483  */
3485  /**
3486  * offset 2164
3487  */
3489  /**
3490  * need 4 byte alignment
3491  * units: units
3492  * offset 2165
3493  */
3494  uint8_t alignmentFill_at_2165[1];
3495  /**
3496  * offset 2166
3497  */
3499  /**
3500  * Cooling fan turn-on temperature threshold, in Celsius
3501  * units: deg C
3502  * offset 2168
3503  */
3504  uint8_t fan2OnTemperature;
3505  /**
3506  * Cooling fan turn-off temperature threshold, in Celsius
3507  * units: deg C
3508  * offset 2169
3509  */
3510  uint8_t fan2OffTemperature;
3511  /**
3512  * offset 2170
3513  */
3515  /**
3516  * offset 2172
3517  */
3518  Gpio tle8888_cs;
3519  /**
3520  * offset 2174
3521  */
3523  /**
3524  * need 4 byte alignment
3525  * units: units
3526  * offset 2175
3527  */
3528  uint8_t alignmentFill_at_2175[1];
3529  /**
3530  * offset 2176
3531  */
3532  Gpio mc33816_cs;
3533  /**
3534  * need 4 byte alignment
3535  * units: units
3536  * offset 2178
3537  */
3538  uint8_t alignmentFill_at_2178[2];
3539  /**
3540  * units: hz
3541  * offset 2180
3542  */
3543  float auxFrequencyFilter;
3544  /**
3545  * offset 2184
3546  */
3547  sent_input_pin_e sentInputPins[SENT_INPUT_COUNT];
3548  /**
3549  * This sets the RPM above which fuel cut is active.
3550  * units: rpm
3551  * offset 2186
3552  */
3553  int16_t coastingFuelCutRpmHigh;
3554  /**
3555  * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
3556  * units: rpm
3557  * offset 2188
3558  */
3559  int16_t coastingFuelCutRpmLow;
3560  /**
3561  * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
3562  * units: %
3563  * offset 2190
3564  */
3565  int16_t coastingFuelCutTps;
3566  /**
3567  * Fuel cutoff is disabled when the engine is cold.
3568  * units: C
3569  * offset 2192
3570  */
3571  int16_t coastingFuelCutClt;
3572  /**
3573  * Increases PID reaction for RPM<target by adding extra percent to PID-error
3574  * units: %
3575  * offset 2194
3576  */
3577  int16_t pidExtraForLowRpm;
3578  /**
3579  * MAP value above which fuel injection is re-enabled.
3580  * units: kPa
3581  * offset 2196
3582  */
3583  int16_t coastingFuelCutMap;
3584  /**
3585  * need 4 byte alignment
3586  * units: units
3587  * offset 2198
3588  */
3589  uint8_t alignmentFill_at_2198[2];
3590  /**
3591  * offset 2200
3592  */
3594  /**
3595  * offset 2220
3596  */
3598  /**
3599  * offset 2240
3600  */
3601  gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT];
3602  /**
3603  * offset 2336
3604  */
3605  gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT];
3606  /**
3607  * offset 2400
3608  */
3609  gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT];
3610  /**
3611  * Heat transfer coefficient at zero flow.
3612  * 0 means the air charge is fully heated to the same temperature as CLT.
3613  * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3614  * offset 2528
3615  */
3616  float tChargeAirCoefMin;
3617  /**
3618  * Heat transfer coefficient at high flow, as defined by "max air flow".
3619  * 0 means the air charge is fully heated to the same temperature as CLT.
3620  * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3621  * offset 2532
3622  */
3623  float tChargeAirCoefMax;
3624  /**
3625  * High flow point for heat transfer estimation.
3626  * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
3627  * units: kg/h
3628  * offset 2536
3629  */
3630  float tChargeAirFlowMax;
3631  /**
3632  * Maximum allowed rate of increase allowed for the estimated charge temperature
3633  * units: deg/sec
3634  * offset 2540
3635  */
3636  float tChargeAirIncrLimit;
3637  /**
3638  * Maximum allowed rate of decrease allowed for the estimated charge temperature
3639  * units: deg/sec
3640  * offset 2544
3641  */
3642  float tChargeAirDecrLimit;
3643  /**
3644  * offset 2548
3645  */
3646  float hip9011Gain;
3647  /**
3648  * iTerm min value
3649  * offset 2552
3650  */
3651  int16_t etb_iTermMin;
3652  /**
3653  * iTerm max value
3654  * offset 2554
3655  */
3656  int16_t etb_iTermMax;
3657  /**
3658  * See useIdleTimingPidControl
3659  * offset 2556
3660  */
3662  /**
3663  * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
3664  * offset 2576
3665  */
3667  /**
3668  * By the way ETB PID runs at 500hz, length in 1/500 of second here.
3669  * offset 2580
3670  */
3671  int16_t etbRocExpAverageLength;
3672  /**
3673  * A delay in cycles between fuel-enrich. portions
3674  * units: cycles
3675  * offset 2582
3676  */
3677  int16_t tpsAccelFractionPeriod;
3678  /**
3679  * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
3680  * units: coef
3681  * offset 2584
3682  */
3684  /**
3685  * offset 2588
3686  */
3688  /**
3689  * offset 2589
3690  */
3692  /**
3693  * iTerm min value
3694  * offset 2590
3695  */
3696  int16_t idlerpmpid_iTermMin;
3697  /**
3698  * offset 2592
3699  */
3701  /**
3702  * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
3703  * E0 = 14.7
3704  * E10 = 14.1
3705  * E85 = 9.9
3706  * E100 = 9.0
3707  * units: :1
3708  * offset 2593
3709  */
3710  scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
3711  /**
3712  * iTerm max value
3713  * offset 2594
3714  */
3715  int16_t idlerpmpid_iTermMax;
3716  /**
3717  * This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.
3718  * units: %
3719  * offset 2596
3720  */
3721  float etbIdleThrottleRange;
3722  /**
3723  * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
3724  * offset 2600
3725  */
3726  uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT];
3727  /**
3728  * units: mg
3729  * offset 2612
3730  */
3731  scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT];
3732  /**
3733  * Trigger comparator center point voltage
3734  * units: V
3735  * offset 2620
3736  */
3737  scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
3738  /**
3739  * Trigger comparator hysteresis voltage (Min)
3740  * units: V
3741  * offset 2621
3742  */
3743  scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
3744  /**
3745  * Trigger comparator hysteresis voltage (Max)
3746  * units: V
3747  * offset 2622
3748  */
3749  scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
3750  /**
3751  * VR-sensor saturation RPM
3752  * units: RPM
3753  * offset 2623
3754  */
3755  scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
3756  /**
3757  * units: ratio
3758  * offset 2624
3759  */
3760  scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE];
3761  /**
3762  * units: RPM
3763  * offset 2636
3764  */
3765  uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE];
3766  /**
3767  * offset 2642
3768  */
3769  int8_t disableFan1AtSpeed;
3770  /**
3771  * offset 2643
3772  */
3773  int8_t disableFan2AtSpeed;
3774  /**
3775  * offset 2644
3776  */
3778  /**
3779  * need 4 byte alignment
3780  * units: units
3781  * offset 2646
3782  */
3783  uint8_t alignmentFill_at_2646[2];
3784  /**
3785  * offset 2648
3786  */
3787  gppwm_channel gppwm[GPPWM_CHANNELS];
3788  /**
3789  * Boost Current
3790  * units: mA
3791  * offset 3080
3792  */
3793  uint16_t mc33_i_boost;
3794  /**
3795  * Peak Current
3796  * units: mA
3797  * offset 3082
3798  */
3799  uint16_t mc33_i_peak;
3800  /**
3801  * Hold Current
3802  * units: mA
3803  * offset 3084
3804  */
3805  uint16_t mc33_i_hold;
3806  /**
3807  * 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.
3808  * units: us
3809  * offset 3086
3810  */
3811  uint16_t mc33_t_max_boost;
3812  /**
3813  * units: us
3814  * offset 3088
3815  */
3816  uint16_t mc33_t_peak_off;
3817  /**
3818  * Peak phase duration
3819  * units: us
3820  * offset 3090
3821  */
3822  uint16_t mc33_t_peak_tot;
3823  /**
3824  * units: us
3825  * offset 3092
3826  */
3827  uint16_t mc33_t_bypass;
3828  /**
3829  * units: us
3830  * offset 3094
3831  */
3832  uint16_t mc33_t_hold_off;
3833  /**
3834  * Hold phase duration
3835  * units: us
3836  * offset 3096
3837  */
3838  uint16_t mc33_t_hold_tot;
3839  /**
3840  * offset 3098
3841  */
3843  /**
3844  * offset 3099
3845  */
3847  /**
3848  * offset 3100
3849  */
3851  /**
3852  * offset 3101
3853  */
3854  pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT];
3855  /**
3856  * need 4 byte alignment
3857  * units: units
3858  * offset 3107
3859  */
3860  uint8_t alignmentFill_at_3107[1];
3861  /**
3862  * units: ratio
3863  * offset 3108
3864  */
3865  float triggerGapOverrideFrom[GAP_TRACKING_LENGTH];
3866  /**
3867  * units: ratio
3868  * offset 3180
3869  */
3870  float triggerGapOverrideTo[GAP_TRACKING_LENGTH];
3871  /**
3872  * 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.
3873  * units: rpm
3874  * offset 3252
3875  */
3876  scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
3877  /**
3878  * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
3879  * units: sec
3880  * offset 3253
3881  */
3882  scaled_channel<uint8_t, 10, 1> dfcoDelay;
3883  /**
3884  * 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.
3885  * units: sec
3886  * offset 3254
3887  */
3888  scaled_channel<uint8_t, 10, 1> acDelay;
3889  /**
3890  * offset 3255
3891  */
3893  /**
3894  * units: mg
3895  * offset 3256
3896  */
3897  scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
3898  /**
3899  * units: %
3900  * offset 3258
3901  */
3902  uint8_t etbJamIntegratorLimit;
3903  /**
3904  * units: lobes/cam
3905  * offset 3259
3906  */
3907  uint8_t hpfpCamLobes;
3908  /**
3909  * offset 3260
3910  */
3912  /**
3913  * offset 3261
3914  */
3915  uint8_t auxiliarySetting1;
3916  /**
3917  * If the requested activation time is below this angle, don't bother running the pump
3918  * units: deg
3919  * offset 3262
3920  */
3921  uint8_t hpfpMinAngle;
3922  /**
3923  * need 4 byte alignment
3924  * units: units
3925  * offset 3263
3926  */
3927  uint8_t alignmentFill_at_3263[1];
3928  /**
3929  * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
3930  * units: cc
3931  * offset 3264
3932  */
3933  scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
3934  /**
3935  * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
3936  * units: deg
3937  * offset 3266
3938  */
3939  uint8_t hpfpActivationAngle;
3940  /**
3941  * offset 3267
3942  */
3943  uint8_t issFilterReciprocal;
3944  /**
3945  * units: %/kPa
3946  * offset 3268
3947  */
3948  scaled_channel<uint16_t, 1000, 1> hpfpPidP;
3949  /**
3950  * units: %/kPa/lobe
3951  * offset 3270
3952  */
3953  scaled_channel<uint16_t, 100000, 1> hpfpPidI;
3954  /**
3955  * 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.
3956  * units: kPa/s
3957  * offset 3272
3958  */
3959  uint16_t hpfpTargetDecay;
3960  /**
3961  * offset 3274
3962  */
3964  /**
3965  * units: ratio
3966  * offset 3282
3967  */
3968  scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT];
3969  /**
3970  * We need to give engine time to build oil pressure without diverting it to VVT
3971  * units: ms
3972  * offset 3302
3973  */
3974  uint16_t vvtActivationDelayMs;
3975  /**
3976  * units: Nm
3977  * offset 3304
3978  */
3979  scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE];
3980  /**
3981  * units: RPM
3982  * offset 3340
3983  */
3984  uint16_t torqueRpmBins[TORQUE_CURVE_SIZE];
3985  /**
3986  * units: Load
3987  * offset 3352
3988  */
3989  uint16_t torqueLoadBins[TORQUE_CURVE_SIZE];
3990  /**
3991  * offset 3364
3992  */
3994  /**
3995  * offset 3365
3996  */
3998  /**
3999  * units: deg
4000  * offset 3366
4001  */
4002  uint16_t acrDisablePhase;
4003  /**
4004  * offset 3368
4005  */
4007  /**
4008  * offset 3388
4009  */
4011  /**
4012  * offset 3408
4013  */
4015  /**
4016  * offset 3410
4017  */
4019  /**
4020  * need 4 byte alignment
4021  * units: units
4022  * offset 3411
4023  */
4024  uint8_t alignmentFill_at_3411[1];
4025  /**
4026  * offset 3412
4027  */
4029  /**
4030  * offset 3414
4031  */
4033  /**
4034  * need 4 byte alignment
4035  * units: units
4036  * offset 3415
4037  */
4038  uint8_t alignmentFill_at_3415[1];
4039  /**
4040  * offset 3416
4041  */
4043  /**
4044  * offset 3418
4045  */
4047  /**
4048  * offset 3420
4049  */
4051  /**
4052  * need 4 byte alignment
4053  * units: units
4054  * offset 3421
4055  */
4056  uint8_t alignmentFill_at_3421[1];
4057  /**
4058  * offset 3422
4059  */
4061  /**
4062  * offset 3424
4063  */
4065  /**
4066  * offset 3426
4067  */
4069  /**
4070  * need 4 byte alignment
4071  * units: units
4072  * offset 3427
4073  */
4074  uint8_t alignmentFill_at_3427[1];
4075  /**
4076  * offset 3428
4077  */
4079  /**
4080  * offset 3430
4081  */
4083  /**
4084  * units: %
4085  * offset 3432
4086  */
4087  float etbMinimumPosition;
4088  /**
4089  * offset 3436
4090  */
4091  uint16_t tuneHidingKey;
4092  /**
4093  * offset 3438
4094  */
4096  /**
4097  * need 4 byte alignment
4098  * units: units
4099  * offset 3455
4100  */
4101  uint8_t alignmentFill_at_3455[1];
4102  /**
4103  * offset 3456
4104  */
4105  uint16_t highSpeedOffsets[HIGH_SPEED_COUNT];
4106  /**
4107  * offset 3520
4108  */
4110  /**
4111  * need 4 byte alignment
4112  * units: units
4113  * offset 3521
4114  */
4115  uint8_t alignmentFill_at_3521[1];
4116  /**
4117  * offset 3522
4118  */
4119  switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT];
4120  /**
4121  * units: rpm
4122  * offset 3538
4123  */
4124  int16_t ALSMinRPM;
4125  /**
4126  * units: rpm
4127  * offset 3540
4128  */
4129  int16_t ALSMaxRPM;
4130  /**
4131  * units: sec
4132  * offset 3542
4133  */
4134  int16_t ALSMaxDuration;
4135  /**
4136  * units: C
4137  * offset 3544
4138  */
4139  int8_t ALSMinCLT;
4140  /**
4141  * units: C
4142  * offset 3545
4143  */
4144  int8_t ALSMaxCLT;
4145  /**
4146  * offset 3546
4147  */
4148  uint8_t alsMinTimeBetween;
4149  /**
4150  * offset 3547
4151  */
4152  uint8_t alsEtbPosition;
4153  /**
4154  * units: %
4155  * offset 3548
4156  */
4158  /**
4159  * offset 3549
4160  */
4162  /**
4163  * offset 3550
4164  */
4165  uint16_t customSentTpsMin;
4166  /**
4167  * units: %
4168  * offset 3552
4169  */
4170  int ALSIdleAdd;
4171  /**
4172  * units: %
4173  * offset 3556
4174  */
4175  int ALSEtbAdd;
4176  /**
4177  * offset 3560
4178  */
4179  float ALSSkipRatio;
4180  /**
4181  * offset 3564
4182  */
4183  uint8_t unusedSorry11;
4184  /**
4185  * offset 3565
4186  */
4188  /**
4189  * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4190  * units: %
4191  * offset 3566
4192  */
4193  scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4194  /**
4195  * For Toyota ETCS-i, use ~69%
4196  * units: %
4197  * offset 3567
4198  */
4199  scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4200  /**
4201  * offset 3568
4202  */
4203  pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT];
4204  /**
4205  * offset 3576
4206  */
4207  uint16_t customSentTpsMax;
4208  /**
4209  * offset 3578
4210  */
4211  uint16_t kLineBaudRate;
4212  /**
4213  * offset 3580
4214  */
4216  /**
4217  * offset 3581
4218  */
4219  UiMode uiMode;
4220  /**
4221  * Crank angle ATDC of first lobe peak
4222  * units: deg
4223  * offset 3582
4224  */
4225  int16_t hpfpPeakPos;
4226  /**
4227  * units: us
4228  * offset 3584
4229  */
4230  int16_t kLinePeriodUs;
4231  /**
4232  * 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)
4233  * units: RPM
4234  * offset 3586
4235  */
4236  scaled_channel<uint8_t, 1, 10> rpmSoftLimitWindowSize;
4237  /**
4238  * Degrees of timing REMOVED from actual timing during soft RPM limit window
4239  * units: deg
4240  * offset 3587
4241  */
4242  scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4243  /**
4244  * % of fuel ADDED during window
4245  * units: %
4246  * offset 3588
4247  */
4248  scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
4249  /**
4250  * 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
4251  * units: RPM
4252  * offset 3589
4253  */
4254  scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4255  /**
4256  * Time between bench test pulses
4257  * units: ms
4258  * offset 3590
4259  */
4260  scaled_channel<uint16_t, 10, 1> benchTestOffTime;
4261  /**
4262  * 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
4263  * units: kPa (absolute)
4264  * offset 3592
4265  */
4266  scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4267  /**
4268  * Boost duty cycle modified by gear
4269  * units: %
4270  * offset 3593
4271  */
4272  scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT];
4273  /**
4274  * need 4 byte alignment
4275  * units: units
4276  * offset 3603
4277  */
4278  uint8_t alignmentFill_at_3603[1];
4279  /**
4280  * How many test bench pulses do you want
4281  * offset 3604
4282  */
4283  uint32_t benchTestCount;
4284  /**
4285  * How long initial IAC adder is held before starting to decay.
4286  * units: seconds
4287  * offset 3608
4288  */
4289  scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
4290  /**
4291  * How long it takes to remove initial IAC adder to return to normal idle.
4292  * units: seconds
4293  * offset 3609
4294  */
4295  scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4296  /**
4297  * offset 3610
4298  */
4299  switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT];
4300  /**
4301  * offset 3622
4302  */
4303  pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT];
4304  /**
4305  * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
4306  * units: ratio
4307  * offset 3628
4308  */
4309  scaled_channel<uint16_t, 10000, 1> canVssScaling;
4310  /**
4311  * need 4 byte alignment
4312  * units: units
4313  * offset 3630
4314  */
4315  uint8_t alignmentFill_at_3630[2];
4316  /**
4317  * offset 3632
4318  */
4320  /**
4321  * offset 3664
4322  */
4324  /**
4325  * offset 3696
4326  */
4328  /**
4329  * offset 3728
4330  */
4332  /**
4333  * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
4334  * offset 3760
4335  */
4337  /**
4338  * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
4339  * offset 3761
4340  */
4342  /**
4343  * offset 3762
4344  */
4345  Gpio dacOutputPins[DAC_OUTPUT_COUNT];
4346  /**
4347  * offset 3766
4348  */
4350  /**
4351  * Number of speedometer pulses per kilometer travelled.
4352  * offset 3768
4353  */
4354  uint16_t speedometerPulsePerKm;
4355  /**
4356  * offset 3770
4357  */
4358  uint8_t simulatorCamPosition[CAM_INPUTS_COUNT];
4359  /**
4360  * offset 3774
4361  */
4363  /**
4364  * offset 3775
4365  */
4367  /**
4368  * units: ratio
4369  * offset 3776
4370  */
4371  float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH];
4372  /**
4373  * units: ratio
4374  * offset 3792
4375  */
4376  float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH];
4377  /**
4378  * units: %
4379  * offset 3808
4380  */
4381  int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4382  /**
4383  * If injector duty cycle hits this value, instantly cut fuel.
4384  * units: %
4385  * offset 3844
4386  */
4387  uint8_t maxInjectorDutyInstant;
4388  /**
4389  * If injector duty cycle hits this value for the specified delay time, cut fuel.
4390  * units: %
4391  * offset 3845
4392  */
4393  uint8_t maxInjectorDutySustained;
4394  /**
4395  * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
4396  * units: sec
4397  * offset 3846
4398  */
4399  scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
4400  /**
4401  * need 4 byte alignment
4402  * units: units
4403  * offset 3847
4404  */
4405  uint8_t alignmentFill_at_3847[1];
4406  /**
4407  * offset 3848
4408  */
4409  output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT];
4410  /**
4411  * units: Deg
4412  * offset 3872
4413  */
4414  int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4415  /**
4416  * units: %
4417  * offset 3908
4418  */
4419  int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE];
4420  /**
4421  * offset 3944
4422  */
4423  float auxSpeed1Multiplier;
4424  /**
4425  * offset 3948
4426  */
4428  /**
4429  * offset 3952
4430  */
4431  Gpio spi4mosiPin;
4432  /**
4433  * offset 3954
4434  */
4435  Gpio spi4misoPin;
4436  /**
4437  * offset 3956
4438  */
4439  Gpio spi4sckPin;
4440  /**
4441  * offset 3958
4442  */
4443  Gpio spi5mosiPin;
4444  /**
4445  * offset 3960
4446  */
4447  Gpio spi5misoPin;
4448  /**
4449  * offset 3962
4450  */
4451  Gpio spi5sckPin;
4452  /**
4453  * offset 3964
4454  */
4455  Gpio spi6mosiPin;
4456  /**
4457  * offset 3966
4458  */
4459  Gpio spi6misoPin;
4460  /**
4461  * offset 3968
4462  */
4463  Gpio spi6sckPin;
4464  /**
4465  * offset 3970
4466  */
4468  /**
4469  * offset 3971
4470  */
4472  /**
4473  * offset 3972
4474  */
4476  /**
4477  * offset 3973
4478  */
4480  /**
4481  * offset 3974
4482  */
4484  /**
4485  * offset 3975
4486  */
4488  /**
4489  * offset 3976
4490  */
4492  /**
4493  * offset 3977
4494  */
4496  /**
4497  * need 4 byte alignment
4498  * units: units
4499  * offset 3978
4500  */
4501  uint8_t alignmentFill_at_3978[2];
4502  /**
4503  * Secondary TTL channel baud rate
4504  * units: BPs
4505  * offset 3980
4506  */
4507  uint32_t tunerStudioSerialSpeed;
4508  /**
4509  * offset 3984
4510  */
4512  /**
4513  * offset 3986
4514  */
4516  /**
4517  * need 4 byte alignment
4518  * units: units
4519  * offset 3987
4520  */
4521  uint8_t alignmentFill_at_3987[1];
4522  /**
4523  * offset 3988
4524  */
4525  int anotherCiTest;
4526  /**
4527  * offset 3992
4528  */
4529  uint32_t device_uid[3];
4530  /**
4531  * offset 4004
4532  */
4533  adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT];
4534  /**
4535  * need 4 byte alignment
4536  * units: units
4537  * offset 4010
4538  */
4539  uint8_t alignmentFill_at_4010[2];
4540  /**
4541  * units: Ohm
4542  * offset 4012
4543  */
4545  /**
4546  * offset 4016
4547  */
4549  /**
4550  * units: units
4551  * offset 4020
4552  */
4553  uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING];
4554 };
4555 static_assert(sizeof(engine_configuration_s) == 4220);
4556 
4557 // start of ign_cyl_trim_s
4558 struct ign_cyl_trim_s {
4559  /**
4560  * offset 0
4561  */
4562  scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE];
4563 };
4564 static_assert(sizeof(ign_cyl_trim_s) == 16);
4565 
4566 // start of fuel_cyl_trim_s
4567 struct fuel_cyl_trim_s {
4568  /**
4569  * offset 0
4570  */
4571  scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE];
4572 };
4573 static_assert(sizeof(fuel_cyl_trim_s) == 16);
4574 
4575 // start of blend_table_s
4576 struct blend_table_s {
4577  /**
4578  * offset 0
4579  */
4580  scaled_channel<int16_t, 10, 1> table[8][8];
4581  /**
4582  * units: Load
4583  * offset 128
4584  */
4585  uint16_t loadBins[8];
4586  /**
4587  * units: RPM
4588  * offset 144
4589  */
4590  uint16_t rpmBins[8];
4591  /**
4592  * offset 160
4593  */
4595  /**
4596  * offset 161
4597  */
4599  /**
4600  * offset 162
4601  */
4602  scaled_channel<int16_t, 10, 1> blendBins[8];
4603  /**
4604  * units: %
4605  * offset 178
4606  */
4607  scaled_channel<uint8_t, 2, 1> blendValues[8];
4608  /**
4609  * need 4 byte alignment
4610  * units: units
4611  * offset 186
4612  */
4613  uint8_t alignmentFill_at_186[2];
4614 };
4615 static_assert(sizeof(blend_table_s) == 188);
4616 
4617 // start of persistent_config_s
4618 struct persistent_config_s {
4619  /**
4620  * offset 0
4621  */
4623  /**
4624  * target TPS value, 0 to 100%
4625  * TODO: use int8 data date once we template interpolation method
4626  * units: target TPS position
4627  * offset 4220
4628  */
4629  float etbBiasBins[ETB_BIAS_CURVE_LENGTH];
4630  /**
4631  * PWM bias, 0 to 100%
4632  * units: ETB duty cycle bias
4633  * offset 4252
4634  */
4635  float etbBiasValues[ETB_BIAS_CURVE_LENGTH];
4636  /**
4637  * units: %
4638  * offset 4284
4639  */
4640  scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE];
4641  /**
4642  * units: Load
4643  * offset 4348
4644  */
4645  uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE];
4646  /**
4647  * units: RPM
4648  * offset 4356
4649  */
4650  scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_SIZE];
4651  /**
4652  * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
4653  * units: RPM
4654  * offset 4364
4655  */
4656  uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE];
4657  /**
4658  * units: ms
4659  * offset 4380
4660  */
4661  scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE];
4662  /**
4663  * CLT-based target RPM for automatic idle controller
4664  * units: C
4665  * offset 4396
4666  */
4667  scaled_channel<int8_t, 1, 2> cltIdleRpmBins[CLT_CURVE_SIZE];
4668  /**
4669  * See idleRpmPid
4670  * units: RPM
4671  * offset 4412
4672  */
4673  scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE];
4674  /**
4675  * CLT-based timing correction
4676  * units: C
4677  * offset 4428
4678  */
4679  float cltTimingBins[CLT_TIMING_CURVE_SIZE];
4680  /**
4681  * units: degree
4682  * offset 4460
4683  */
4684  float cltTimingExtra[CLT_TIMING_CURVE_SIZE];
4685  /**
4686  * units: x
4687  * offset 4492
4688  */
4689  float scriptCurve1Bins[SCRIPT_CURVE_16];
4690  /**
4691  * units: y
4692  * offset 4556
4693  */
4694  float scriptCurve1[SCRIPT_CURVE_16];
4695  /**
4696  * units: x
4697  * offset 4620
4698  */
4699  float scriptCurve2Bins[SCRIPT_CURVE_16];
4700  /**
4701  * units: y
4702  * offset 4684
4703  */
4704  float scriptCurve2[SCRIPT_CURVE_16];
4705  /**
4706  * units: x
4707  * offset 4748
4708  */
4709  float scriptCurve3Bins[SCRIPT_CURVE_8];
4710  /**
4711  * units: y
4712  * offset 4780
4713  */
4714  float scriptCurve3[SCRIPT_CURVE_8];
4715  /**
4716  * units: x
4717  * offset 4812
4718  */
4719  float scriptCurve4Bins[SCRIPT_CURVE_8];
4720  /**
4721  * units: y
4722  * offset 4844
4723  */
4724  float scriptCurve4[SCRIPT_CURVE_8];
4725  /**
4726  * units: x
4727  * offset 4876
4728  */
4729  float scriptCurve5Bins[SCRIPT_CURVE_8];
4730  /**
4731  * units: y
4732  * offset 4908
4733  */
4734  float scriptCurve5[SCRIPT_CURVE_8];
4735  /**
4736  * units: x
4737  * offset 4940
4738  */
4739  float scriptCurve6Bins[SCRIPT_CURVE_8];
4740  /**
4741  * units: y
4742  * offset 4972
4743  */
4744  float scriptCurve6[SCRIPT_CURVE_8];
4745  /**
4746  * units: kPa
4747  * offset 5004
4748  */
4749  float baroCorrPressureBins[BARO_CORR_SIZE];
4750  /**
4751  * units: RPM
4752  * offset 5020
4753  */
4754  float baroCorrRpmBins[BARO_CORR_SIZE];
4755  /**
4756  * units: ratio
4757  * offset 5036
4758  */
4759  float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE];
4760  /**
4761  * Cranking fuel correction coefficient based on TPS
4762  * units: Ratio
4763  * offset 5100
4764  */
4765  float crankingTpsCoef[CRANKING_CURVE_SIZE];
4766  /**
4767  * units: %
4768  * offset 5132
4769  */
4770  float crankingTpsBins[CRANKING_CURVE_SIZE];
4771  /**
4772  * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
4773  * units: RPM
4774  * offset 5164
4775  */
4776  uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE];
4777  /**
4778  * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
4779  * units: deg
4780  * offset 5172
4781  */
4782  scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE];
4783  /**
4784  * RPM-based idle position for coasting
4785  * units: RPM
4786  * offset 5180
4787  */
4788  scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE];
4789  /**
4790  * RPM-based idle position for coasting
4791  * units: %
4792  * offset 5196
4793  */
4794  scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE];
4795  /**
4796  * offset 5212
4797  */
4799  /**
4800  * offset 5332
4801  */
4802  uint8_t unusedGapHere[16];
4803  /**
4804  * offset 5348
4805  */
4806  scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT];
4807  /**
4808  * units: RPM
4809  * offset 5412
4810  */
4811  scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT];
4812  /**
4813  * offset 5420
4814  */
4815  scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT];
4816  /**
4817  * offset 5484
4818  */
4819  uint8_t boostTpsBins[BOOST_LOAD_COUNT];
4820  /**
4821  * units: %
4822  * offset 5492
4823  */
4824  uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE];
4825  /**
4826  * units: %
4827  * offset 5556
4828  */
4829  uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE];
4830  /**
4831  * units: RPM
4832  * offset 5564
4833  */
4834  scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE];
4835  /**
4836  * CLT-based cranking position multiplier for simple manual idle controller
4837  * units: C
4838  * offset 5572
4839  */
4840  float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE];
4841  /**
4842  * CLT-based cranking position multiplier for simple manual idle controller
4843  * units: %
4844  * offset 5604
4845  */
4846  float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE];
4847  /**
4848  * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
4849  * units: RPM
4850  * offset 5636
4851  */
4852  scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE];
4853  /**
4854  * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
4855  * units: deg
4856  * offset 5644
4857  */
4858  float idleAdvance[IDLE_ADVANCE_CURVE_SIZE];
4859  /**
4860  * units: RPM
4861  * offset 5676
4862  */
4863  scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE];
4864  /**
4865  * units: load
4866  * offset 5680
4867  */
4868  uint8_t idleVeLoadBins[IDLE_VE_SIZE];
4869  /**
4870  * units: %
4871  * offset 5684
4872  */
4873  scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE];
4874  /**
4875  * offset 5716
4876  */
4878  /**
4879  * units: C
4880  * offset 19216
4881  */
4882  float cltFuelCorrBins[CLT_CURVE_SIZE];
4883  /**
4884  * units: ratio
4885  * offset 19280
4886  */
4887  float cltFuelCorr[CLT_CURVE_SIZE];
4888  /**
4889  * units: C
4890  * offset 19344
4891  */
4892  float iatFuelCorrBins[IAT_CURVE_SIZE];
4893  /**
4894  * units: ratio
4895  * offset 19408
4896  */
4897  float iatFuelCorr[IAT_CURVE_SIZE];
4898  /**
4899  * units: ratio
4900  * offset 19472
4901  */
4902  float crankingFuelCoef[CRANKING_CURVE_SIZE];
4903  /**
4904  * units: C
4905  * offset 19504
4906  */
4907  float crankingFuelBins[CRANKING_CURVE_SIZE];
4908  /**
4909  * units: ratio
4910  * offset 19536
4911  */
4912  float crankingCycleCoef[CRANKING_CURVE_SIZE];
4913  /**
4914  * units: counter
4915  * offset 19568
4916  */
4917  float crankingCycleBins[CRANKING_CURVE_SIZE];
4918  /**
4919  * CLT-based idle position multiplier for simple manual idle controller
4920  * units: C
4921  * offset 19600
4922  */
4923  float cltIdleCorrBins[CLT_CURVE_SIZE];
4924  /**
4925  * CLT-based idle position multiplier for simple manual idle controller
4926  * units: ratio
4927  * offset 19664
4928  */
4929  float cltIdleCorr[CLT_CURVE_SIZE];
4930  /**
4931  * Also known as MAF transfer function.
4932  * kg/hour value.
4933  * By the way 2.081989116 kg/h = 1 ft3/m
4934  * units: kg/hour
4935  * offset 19728
4936  */
4937  float mafDecoding[MAF_DECODING_COUNT];
4938  /**
4939  * units: V
4940  * offset 19856
4941  */
4942  float mafDecodingBins[MAF_DECODING_COUNT];
4943  /**
4944  * units: deg
4945  * offset 19984
4946  */
4947  scaled_channel<int8_t, 10, 1> ignitionIatCorrTable[8][8];
4948  /**
4949  * units: C
4950  * offset 20048
4951  */
4952  int8_t ignitionIatCorrTempBins[8];
4953  /**
4954  * units: Load
4955  * offset 20056
4956  */
4957  scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[8];
4958  /**
4959  * units: deg
4960  * offset 20064
4961  */
4962  int16_t injectionPhase[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
4963  /**
4964  * units: Load
4965  * offset 20576
4966  */
4967  uint16_t injPhaseLoadBins[FUEL_LOAD_COUNT];
4968  /**
4969  * units: RPM
4970  * offset 20608
4971  */
4972  uint16_t injPhaseRpmBins[FUEL_RPM_COUNT];
4973  /**
4974  * units: onoff
4975  * offset 20640
4976  */
4977  uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT];
4978  /**
4979  * units: kPa
4980  * offset 20700
4981  */
4982  scaled_channel<uint16_t, 100, 1> mapEstimateTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
4983  /**
4984  * units: % TPS
4985  * offset 21212
4986  */
4987  scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[FUEL_LOAD_COUNT];
4988  /**
4989  * units: RPM
4990  * offset 21244
4991  */
4992  uint16_t mapEstimateRpmBins[FUEL_RPM_COUNT];
4993  /**
4994  * units: value
4995  * offset 21276
4996  */
4997  int8_t vvtTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
4998  /**
4999  * units: L
5000  * offset 21340
5001  */
5002  uint16_t vvtTable1LoadBins[SCRIPT_TABLE_8];
5003  /**
5004  * units: RPM
5005  * offset 21356
5006  */
5007  uint16_t vvtTable1RpmBins[SCRIPT_TABLE_8];
5008  /**
5009  * units: value
5010  * offset 21372
5011  */
5012  int8_t vvtTable2[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
5013  /**
5014  * units: L
5015  * offset 21436
5016  */
5017  uint16_t vvtTable2LoadBins[SCRIPT_TABLE_8];
5018  /**
5019  * units: RPM
5020  * offset 21452
5021  */
5022  uint16_t vvtTable2RpmBins[SCRIPT_TABLE_8];
5023  /**
5024  * units: deg
5025  * offset 21468
5026  */
5027  scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT];
5028  /**
5029  * units: Load
5030  * offset 21980
5031  */
5032  uint16_t ignitionLoadBins[IGN_LOAD_COUNT];
5033  /**
5034  * units: RPM
5035  * offset 22012
5036  */
5037  uint16_t ignitionRpmBins[IGN_RPM_COUNT];
5038  /**
5039  * units: %
5040  * offset 22044
5041  */
5042  scaled_channel<uint16_t, 10, 1> veTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5043  /**
5044  * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
5045  * offset 22556
5046  */
5047  uint16_t veLoadBins[FUEL_LOAD_COUNT];
5048  /**
5049  * units: RPM
5050  * offset 22588
5051  */
5052  uint16_t veRpmBins[FUEL_RPM_COUNT];
5053  /**
5054  * units: lambda
5055  * offset 22620
5056  */
5057  scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT];
5058  /**
5059  * offset 22876
5060  */
5061  uint16_t lambdaLoadBins[FUEL_LOAD_COUNT];
5062  /**
5063  * units: RPM
5064  * offset 22908
5065  */
5066  uint16_t lambdaRpmBins[FUEL_RPM_COUNT];
5067  /**
5068  * units: value
5069  * offset 22940
5070  */
5071  float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE];
5072  /**
5073  * units: from
5074  * offset 23196
5075  */
5076  float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE];
5077  /**
5078  * units: to
5079  * offset 23228
5080  */
5081  float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE];
5082  /**
5083  * units: value
5084  * offset 23260
5085  */
5086  float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
5087  /**
5088  * units: L
5089  * offset 23516
5090  */
5091  int16_t scriptTable1LoadBins[SCRIPT_TABLE_8];
5092  /**
5093  * units: RPM
5094  * offset 23532
5095  */
5096  int16_t scriptTable1RpmBins[SCRIPT_TABLE_8];
5097  /**
5098  * units: value
5099  * offset 23548
5100  */
5101  float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE];
5102  /**
5103  * units: L
5104  * offset 23804
5105  */
5106  int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE];
5107  /**
5108  * units: RPM
5109  * offset 23820
5110  */
5111  int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE];
5112  /**
5113  * units: value
5114  * offset 23836
5115  */
5116  uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8];
5117  /**
5118  * units: L
5119  * offset 23900
5120  */
5121  int16_t scriptTable3LoadBins[SCRIPT_TABLE_8];
5122  /**
5123  * units: RPM
5124  * offset 23916
5125  */
5126  int16_t scriptTable3RpmBins[SCRIPT_TABLE_8];
5127  /**
5128  * units: value
5129  * offset 23932
5130  */
5131  uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM];
5132  /**
5133  * units: L
5134  * offset 24012
5135  */
5136  int16_t scriptTable4LoadBins[SCRIPT_TABLE_8];
5137  /**
5138  * units: RPM
5139  * offset 24028
5140  */
5141  int16_t scriptTable4RpmBins[TABLE_4_RPM];
5142  /**
5143  * offset 24048
5144  */
5145  uint16_t ignTrimLoadBins[IGN_TRIM_SIZE];
5146  /**
5147  * units: rpm
5148  * offset 24056
5149  */
5150  uint16_t ignTrimRpmBins[IGN_TRIM_SIZE];
5151  /**
5152  * offset 24064
5153  */
5155  /**
5156  * offset 24256
5157  */
5158  uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE];
5159  /**
5160  * units: rpm
5161  * offset 24264
5162  */
5163  uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE];
5164  /**
5165  * offset 24272
5166  */
5168  /**
5169  * units: ratio
5170  * offset 24464
5171  */
5172  scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE];
5173  /**
5174  * units: Airmass
5175  * offset 24480
5176  */
5177  scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH];
5178  /**
5179  * units: %
5180  * offset 24488
5181  */
5182  uint8_t tcu_pcValsR[TCU_TABLE_WIDTH];
5183  /**
5184  * units: %
5185  * offset 24496
5186  */
5187  uint8_t tcu_pcValsN[TCU_TABLE_WIDTH];
5188  /**
5189  * units: %
5190  * offset 24504
5191  */
5192  uint8_t tcu_pcVals1[TCU_TABLE_WIDTH];
5193  /**
5194  * units: %
5195  * offset 24512
5196  */
5197  uint8_t tcu_pcVals2[TCU_TABLE_WIDTH];
5198  /**
5199  * units: %
5200  * offset 24520
5201  */
5202  uint8_t tcu_pcVals3[TCU_TABLE_WIDTH];
5203  /**
5204  * units: %
5205  * offset 24528
5206  */
5207  uint8_t tcu_pcVals4[TCU_TABLE_WIDTH];
5208  /**
5209  * units: %
5210  * offset 24536
5211  */
5212  uint8_t tcu_pcVals12[TCU_TABLE_WIDTH];
5213  /**
5214  * units: %
5215  * offset 24544
5216  */
5217  uint8_t tcu_pcVals23[TCU_TABLE_WIDTH];
5218  /**
5219  * units: %
5220  * offset 24552
5221  */
5222  uint8_t tcu_pcVals34[TCU_TABLE_WIDTH];
5223  /**
5224  * units: %
5225  * offset 24560
5226  */
5227  uint8_t tcu_pcVals21[TCU_TABLE_WIDTH];
5228  /**
5229  * units: %
5230  * offset 24568
5231  */
5232  uint8_t tcu_pcVals32[TCU_TABLE_WIDTH];
5233  /**
5234  * units: %
5235  * offset 24576
5236  */
5237  uint8_t tcu_pcVals43[TCU_TABLE_WIDTH];
5238  /**
5239  * units: TPS
5240  * offset 24584
5241  */
5242  uint8_t tcu_tccTpsBins[8];
5243  /**
5244  * units: MPH
5245  * offset 24592
5246  */
5247  uint8_t tcu_tccLockSpeed[8];
5248  /**
5249  * units: MPH
5250  * offset 24600
5251  */
5252  uint8_t tcu_tccUnlockSpeed[8];
5253  /**
5254  * units: KPH
5255  * offset 24608
5256  */
5257  uint8_t tcu_32SpeedBins[8];
5258  /**
5259  * units: %
5260  * offset 24616
5261  */
5262  uint8_t tcu_32Vals[8];
5263  /**
5264  * units: %
5265  * offset 24624
5266  */
5267  scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE];
5268  /**
5269  * units: %
5270  * offset 24660
5271  */
5272  uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE];
5273  /**
5274  * units: RPM
5275  * offset 24666
5276  */
5277  scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_SIZE];
5278  /**
5279  * units: deg
5280  * offset 24672
5281  */
5282  scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE];
5283  /**
5284  * units: %
5285  * offset 24708
5286  */
5287  uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE];
5288  /**
5289  * units: RPM
5290  * offset 24714
5291  */
5292  scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_SIZE];
5293  /**
5294  * units: deg
5295  * offset 24720
5296  */
5297  scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[4][4];
5298  /**
5299  * units: TPS
5300  * offset 24752
5301  */
5302  uint16_t alsIgnRetardLoadBins[4];
5303  /**
5304  * units: RPM
5305  * offset 24760
5306  */
5307  uint16_t alsIgnRetardrpmBins[4];
5308  /**
5309  * units: percent
5310  * offset 24768
5311  */
5312  scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[4][4];
5313  /**
5314  * units: TPS
5315  * offset 24800
5316  */
5317  uint16_t alsFuelAdjustmentLoadBins[4];
5318  /**
5319  * units: RPM
5320  * offset 24808
5321  */
5322  uint16_t alsFuelAdjustmentrpmBins[4];
5323  /**
5324  * units: ratio
5325  * offset 24816
5326  */
5327  scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[4][4];
5328  /**
5329  * units: TPS
5330  * offset 24848
5331  */
5332  uint16_t alsIgnSkipLoadBins[4];
5333  /**
5334  * units: RPM
5335  * offset 24856
5336  */
5337  uint16_t alsIgnSkiprpmBins[4];
5338  /**
5339  * offset 24864
5340  */
5341  blend_table_s ignBlends[IGN_BLEND_COUNT];
5342  /**
5343  * offset 25616
5344  */
5345  blend_table_s veBlends[VE_BLEND_COUNT];
5346  /**
5347  * units: %
5348  * offset 26368
5349  */
5350  scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[12];
5351  /**
5352  * In units of g/s normalized to choked flow conditions
5353  * units: g/s
5354  * offset 26392
5355  */
5356  scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[12];
5357  /**
5358  * offset 26416
5359  */
5360  blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT];
5361  /**
5362  * offset 26792
5363  */
5364  blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT];
5365  /**
5366  * units: level
5367  * offset 27168
5368  */
5369  float tcu_rangeP[RANGE_INPUT_COUNT];
5370  /**
5371  * units: level
5372  * offset 27192
5373  */
5374  float tcu_rangeR[RANGE_INPUT_COUNT];
5375  /**
5376  * units: level
5377  * offset 27216
5378  */
5379  float tcu_rangeN[RANGE_INPUT_COUNT];
5380  /**
5381  * units: level
5382  * offset 27240
5383  */
5384  float tcu_rangeD[RANGE_INPUT_COUNT];
5385  /**
5386  * units: level
5387  * offset 27264
5388  */
5389  float tcu_rangeM[RANGE_INPUT_COUNT];
5390  /**
5391  * units: level
5392  * offset 27288
5393  */
5394  float tcu_rangeM3[RANGE_INPUT_COUNT];
5395  /**
5396  * units: level
5397  * offset 27312
5398  */
5399  float tcu_rangeM2[RANGE_INPUT_COUNT];
5400  /**
5401  * units: level
5402  * offset 27336
5403  */
5404  float tcu_rangeM1[RANGE_INPUT_COUNT];
5405  /**
5406  * units: level
5407  * offset 27360
5408  */
5409  float tcu_rangePlus[RANGE_INPUT_COUNT];
5410  /**
5411  * units: level
5412  * offset 27384
5413  */
5414  float tcu_rangeMinus[RANGE_INPUT_COUNT];
5415  /**
5416  * units: level
5417  * offset 27408
5418  */
5419  float tcu_rangeLow[RANGE_INPUT_COUNT];
5420  /**
5421  * units: lambda
5422  * offset 27432
5423  */
5424  scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[4][4];
5425  /**
5426  * offset 27448
5427  */
5428  uint16_t lambdaMaxDeviationLoadBins[4];
5429  /**
5430  * units: RPM
5431  * offset 27456
5432  */
5433  uint16_t lambdaMaxDeviationRpmBins[4];
5434  /**
5435  * units: %
5436  * offset 27464
5437  */
5438  uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT];
5439  /**
5440  * offset 27500
5441  */
5442  uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT];
5443  /**
5444  * units: RPM
5445  * offset 27512
5446  */
5447  uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT];
5448  /**
5449  * units: deg C
5450  * offset 27524
5451  */
5452  int8_t wwCltBins[WWAE_TABLE_SIZE];
5453  /**
5454  * offset 27532
5455  */
5456  scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE];
5457  /**
5458  * offset 27540
5459  */
5460  scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE];
5461  /**
5462  * units: kPa
5463  * offset 27548
5464  */
5465  int8_t wwMapBins[WWAE_TABLE_SIZE];
5466  /**
5467  * offset 27556
5468  */
5469  scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE];
5470  /**
5471  * offset 27564
5472  */
5473  scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE];
5474  /**
5475  * units: %
5476  * offset 27572
5477  */
5478  scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE];
5479  /**
5480  * units: deg
5481  * offset 27588
5482  */
5483  scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE];
5484  /**
5485  * units: volts
5486  * offset 27604
5487  */
5488  uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE];
5489  /**
5490  * units: ms
5491  * offset 27612
5492  */
5493  scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE];
5494  /**
5495  * units: kPa
5496  * offset 27628
5497  */
5498  uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE];
5499  /**
5500  * units: load
5501  * offset 27828
5502  */
5503  scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE];
5504  /**
5505  * units: RPM
5506  * offset 27848
5507  */
5508  scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE];
5509  /**
5510  * units: %
5511  * offset 27858
5512  */
5513  int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE];
5514  /**
5515  * units: cc/lobe
5516  * offset 27958
5517  */
5518  scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE];
5519  /**
5520  * units: RPM
5521  * offset 27978
5522  */
5523  scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE];
5524  /**
5525  * units: RPM
5526  * offset 27988
5527  */
5528  uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE];
5529  /**
5530  * Knock sensor output knock detection threshold depending on current RPM.
5531  * units: dB
5532  * offset 28020
5533  */
5534  scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE];
5535  /**
5536  * units: RPM
5537  * offset 28036
5538  */
5539  scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE];
5540  /**
5541  * units: multiplier
5542  * offset 28040
5543  */
5544  scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE];
5545  /**
5546  * units: C
5547  * offset 28044
5548  */
5549  int8_t cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE];
5550  /**
5551  * units: RPM
5552  * offset 28048
5553  */
5554  uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE];
5555  /**
5556  * units: volt
5557  * offset 28056
5558  */
5559  scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT];
5560  /**
5561  * units: %
5562  * offset 28072
5563  */
5564  uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT];
5565  /**
5566  * units: volts
5567  * offset 28080
5568  */
5569  scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE];
5570  /**
5571  * units: multiplier
5572  * offset 28088
5573  */
5574  scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE];
5575  /**
5576  * units: %
5577  * offset 28096
5578  */
5579  scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH];
5580  /**
5581  * units: MPH
5582  * offset 28104
5583  */
5584  uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH];
5585  /**
5586  * units: MPH
5587  * offset 28112
5588  */
5589  uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH];
5590  /**
5591  * units: MPH
5592  * offset 28120
5593  */
5594  uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH];
5595  /**
5596  * units: MPH
5597  * offset 28128
5598  */
5599  uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH];
5600  /**
5601  * units: MPH
5602  * offset 28136
5603  */
5604  uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH];
5605  /**
5606  * units: MPH
5607  * offset 28144
5608  */
5609  uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH];
5610  /**
5611  * units: ms
5612  * offset 28152
5613  */
5614  float tcu_shiftTime;
5615 };
5616 static_assert(sizeof(persistent_config_s) == 28156);
5617 
5618 // end
5619 // this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt Tue May 14 14:11:05 UTC 2024
Gpio
debug_mode_e
Definition: engine_types.h:280
trigger_type_e
Definition: engine_types.h:286
engine_type_e
Definition: engine_types.h:18
firing_order_e
Definition: firing_order.h:85
ve_override_e
Definition: rusefi_enums.h:639
MsIoBoxVss
Definition: rusefi_enums.h:207
launchActivationMode_e
Definition: rusefi_enums.h:579
InjectorNonlinearMode
Definition: rusefi_enums.h:687
boostType_e
Definition: rusefi_enums.h:572
MsIoBoxId
Definition: rusefi_enums.h:200
idle_mode_e
Definition: rusefi_enums.h:185
tle8888_mode_e
Definition: rusefi_enums.h:160
mc33810maxDwellTimer_e
Definition: rusefi_enums.h:170
ignition_mode_e
Definition: rusefi_enums.h:305
vvt_mode_e
Definition: rusefi_enums.h:120
stepper_num_micro_steps_e
Definition: rusefi_enums.h:664
gppwm_channel_e
Definition: rusefi_enums.h:618
air_pressure_sensor_type_e
Definition: rusefi_enums.h:483
engine_load_mode_e
Definition: rusefi_enums.h:144
dc_function_e
Definition: rusefi_enums.h:657
ego_sensor_e
Definition: rusefi_enums.h:415
load_override_e
Definition: rusefi_enums.h:647
injector_pressure_type_e
Definition: rusefi_enums.h:669
injector_compensation_mode_e
Definition: rusefi_enums.h:675
SentEtbType
Definition: rusefi_enums.h:187
uart_device_e
Definition: rusefi_enums.h:339
InjectionTimingMode
Definition: rusefi_enums.h:731
can_vss_nbc_e
Definition: rusefi_enums.h:372
CanGpioType
Definition: rusefi_enums.h:194
spi_device_e
Definition: rusefi_enums.h:361
pin_input_mode_e
Definition: rusefi_enums.h:240
fuel_pressure_sensor_mode_e
Definition: rusefi_enums.h:681
hpfp_cam_e
Definition: rusefi_enums.h:695
can_baudrate_e
Definition: rusefi_enums.h:628
antiLagActivationMode_e
Definition: rusefi_enums.h:584
injection_mode_e
Definition: rusefi_enums.h:331
timing_mode_e
Definition: rusefi_enums.h:527
sensor_chart_e
Definition: rusefi_enums.h:496
can_nbc_e
Definition: rusefi_enums.h:548
UiMode
Definition: rusefi_enums.h:214
imu_type_e
Definition: rusefi_enums.h:393
TransmissionControllerMode
Definition: rusefi_enums.h:724
maf_sensor_type_e
Definition: rusefi_enums.h:514
pin_output_mode_e
Definition: rusefi_enums.h:234
tChargeMode_e
Definition: rusefi_enums.h:555
GearControllerMode
Definition: rusefi_enums.h:717
adc_channel_e
pin_mode_e
int16_t pwm_freq_t
Definition: rusefi_types.h:89
uint8_t engineSyncCam_e
Definition: rusefi_types.h:60
float script_setting_t
Definition: rusefi_types.h:91
char[LUA_SCRIPT_SIZE] lua_script_t
Definition: rusefi_types.h:75
char[VIN_NUMBER_SIZE] vin_number_t
Definition: rusefi_types.h:81
char[WARNING_BUFFER_SIZE] warning_message_t
Definition: rusefi_types.h:77
float angle_t
Definition: rusefi_types.h:58
char[VEHICLE_INFO_SIZE] vehicle_info_t
Definition: rusefi_types.h:79
char[GPPWM_NOTE_SIZE] gppwm_note_t
Definition: rusefi_types.h:83
scaled_channel< int16_t, 10, 1 > blendBins[8]
scaled_channel< uint8_t, 2, 1 > blendValues[8]
scaled_channel< int16_t, 10, 1 > table[8][8]
scaled_channel< uint8_t, 1, 10 > lambdaProtectionRestoreLoad
scaled_channel< uint16_t, 100, 1 > gearRatio[TCU_GEAR_COUNT]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseSlope
scaled_channel< uint8_t, 100, 1 > tchargeValues[16]
scaled_channel< uint16_t, 10000, 1 > canVssScaling
pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT]
adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT]
scaled_channel< uint8_t, 1, 100 > lambdaProtectionRestoreRpm
scaled_channel< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE]
int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
scaled_channel< uint16_t, 1000, 1 > multisparkSparkDuration
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT]
float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT]
pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT]
scaled_channel< uint16_t, 1000, 1 > applyNonlinearBelowPulse
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT]
switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT]
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT]
script_setting_t scriptSetting[SCRIPT_SETTING_COUNT]
scaled_channel< uint8_t, 10, 1 > maxInjectorDutySustainedTimeout
int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
scaled_channel< uint8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT]
scaled_channel< uint8_t, 1, 100 > lambdaProtectionMinRpm
brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT]
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE]
scaled_channel< int8_t, 5, 1 > table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE]
scaled_channel< uint8_t, 2, 1 > table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT]
scaled_channel< int16_t, 2, 1 > loadBins[GPPWM_LOAD_COUNT]
scaled_channel< int8_t, 5, 1 > table[IGN_TRIM_SIZE][IGN_TRIM_SIZE]
float battLagCorrBins[VBAT_INJECTOR_CURVE_SIZE]
float battLagCorr[VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE]
int8_t vvtTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT]
scaled_channel< int8_t, 10, 1 > ignitionIatCorrTable[8][8]
scaled_channel< int16_t, 10, 1 > ALSFuelAdjustment[4][4]
float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE]
scaled_channel< int16_t, 1, 10 > ALSIgnSkipTable[4][4]
scaled_channel< uint8_t, 4, 1 > maxKnockRetardTable[6][6]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT]
scaled_channel< uint8_t, 10, 1 > dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 20, 1 > iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]
uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM]
scaled_channel< uint8_t, 100, 1 > wwTauMapValues[WWAE_TABLE_SIZE]
scaled_channel< int8_t, 2, 1 > knockBaseNoise[ENGINE_NOISE_CURVE_SIZE]
scaled_channel< uint8_t, 50, 1 > tcu_pcAirmassBins[TCU_MAGIC_SIZE]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaBins[12]
scaled_channel< uint16_t, 1000, 1 > hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE]
float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaValues[12]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE]
scaled_channel< int16_t, 100, 1 > crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > throttle2TrimRpmBins[ETB2_TRIM_SIZE]
float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
scaled_channel< uint8_t, 100, 1 > lambdaMaxDeviationTable[4][4]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
int8_t vvtTable2[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_SIZE]
uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< int8_t, 1, 2 > cltIdleRpmBins[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 100, 1 > wwBetaMapValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > wwBetaCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpDeadtimeMS[HPFP_DEADTIME_SIZE]
scaled_channel< uint8_t, 100, 1 > wwTauCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
scaled_channel< uint8_t, 1, 1 > tcu_shiftTpsBins[TCU_TABLE_WIDTH]
scaled_channel< uint16_t, 10, 1 > veTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< int16_t, 10, 1 > ALSTimingRetardTable[4][4]
int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 2 > boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 2, 1 > boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
scaled_channel< uint16_t, 100, 1 > crankingFuelCoefE100[CRANKING_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[FUEL_LOAD_COUNT]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
uint8_t scriptTable2[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
int16_t injectionPhase[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< uint16_t, 10, 1 > idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT]
scaled_channel< uint8_t, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int8_t, 10, 1 > throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE]
scaled_channel< uint8_t, 1, 5 > ignitionIatCorrLoadBins[8]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 147, 1 > lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT]
scaled_channel< uint16_t, 100, 1 > mapEstimateTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< uint8_t, 1, 100 > maxKnockRetardRpmBins[6]
scaled_channel< uint16_t, 10, 1 > timeConstant
scaled_channel< uint8_t, 10, 1 > maxAfr
scaled_channel< uint8_t, 10, 1 > minAfr
scaled_channel< uint8_t, 10, 1 > deadband
scaled_channel< uint8_t, 1, 50 > maxIdleRegionRpm
stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT]
scaled_channel< uint8_t, 1, 50 > rpmBins[6]
scaled_channel< uint8_t, 100, 1 > values[6]