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