rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_at_start_f435.h
Go to the documentation of this file.
1// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
2// by class com.rusefi.output.CHeaderConsumer
3// begin
4#pragma once
5#include "rusefi_types.h"
6// start of stft_cell_cfg_s
7struct stft_cell_cfg_s {
8 /**
9 * Maximum % that the short term fuel trim can add
10 * units: %
11 * offset 0
12 */
13 scaled_channel<uint8_t, 10, 1> maxAdd;
14 /**
15 * Maximum % that the short term fuel trim can remove
16 * units: %
17 * offset 1
18 */
19 scaled_channel<uint8_t, 10, 1> maxRemove;
20 /**
21 * Commonly referred as Integral gain.
22 * 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.
23 * Lower values makes the correction more sensitive, higher values slow the correction down.
24 * units: sec
25 * offset 2
26 */
27 scaled_channel<uint16_t, 10, 1> timeConstant;
28};
29static_assert(sizeof(stft_cell_cfg_s) == 4);
30
31// start of stft_s
32struct stft_s {
33 /**
34 * Below this RPM, the idle region is active, idle+300 would be a good value
35 * units: RPM
36 * offset 0
37 */
38 scaled_channel<uint8_t, 1, 50> maxIdleRegionRpm;
39 /**
40 * need 4 byte alignment
41 * units: units
42 * offset 1
43 */
44 uint8_t alignmentFill_at_1[1] = {};
45 /**
46 * Below this engine load, the overrun region is active
47 * When tuning by MAP the units are kPa, e.g. 30 would mean 30kPa. When tuning TPS, 30 would be 30%
48 * units: load
49 * offset 2
50 */
51 uint16_t maxOverrunLoad;
52 /**
53 * Above this engine load, the power region is active
54 * When tuning by MAP the units are kPa
55 * units: load
56 * offset 4
57 */
58 uint16_t minPowerLoad;
59 /**
60 * 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.
61 * units: %
62 * offset 6
63 */
64 scaled_channel<uint8_t, 10, 1> deadband;
65 /**
66 * Below this temperature, correction is disabled.
67 * units: C
68 * offset 7
69 */
70 int8_t minClt;
71 /**
72 * Below this AFR, correction is paused
73 * units: afr
74 * offset 8
75 */
76 scaled_channel<uint8_t, 10, 1> minAfr;
77 /**
78 * Above this AFR, correction is paused
79 * units: afr
80 * offset 9
81 */
82 scaled_channel<uint8_t, 10, 1> maxAfr;
83 /**
84 * Delay after starting the engine before beginning closed loop correction.
85 * units: seconds
86 * offset 10
87 */
88 uint8_t startupDelay;
89 /**
90 * need 4 byte alignment
91 * units: units
92 * offset 11
93 */
94 uint8_t alignmentFill_at_11[1] = {};
95 /**
96 * offset 12
97 */
98 stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT] = {};
99};
100static_assert(sizeof(stft_s) == 28);
101
102// start of ltft_s
103struct ltft_s {
104 /**
105 * Enables lambda sensor long term fuel corrections learning
106 offset 0 bit 0 */
107 bool enabled : 1 {};
108 /**
109 * Enables applying long term fuel corrections
110 offset 0 bit 1 */
111 bool correctionEnabled : 1 {};
112 /**
113 offset 0 bit 2 */
114 bool unusedBit_2_2 : 1 {};
115 /**
116 offset 0 bit 3 */
117 bool unusedBit_2_3 : 1 {};
118 /**
119 offset 0 bit 4 */
120 bool unusedBit_2_4 : 1 {};
121 /**
122 offset 0 bit 5 */
123 bool unusedBit_2_5 : 1 {};
124 /**
125 offset 0 bit 6 */
126 bool unusedBit_2_6 : 1 {};
127 /**
128 offset 0 bit 7 */
129 bool unusedBit_2_7 : 1 {};
130 /**
131 offset 0 bit 8 */
132 bool unusedBit_2_8 : 1 {};
133 /**
134 offset 0 bit 9 */
135 bool unusedBit_2_9 : 1 {};
136 /**
137 offset 0 bit 10 */
138 bool unusedBit_2_10 : 1 {};
139 /**
140 offset 0 bit 11 */
141 bool unusedBit_2_11 : 1 {};
142 /**
143 offset 0 bit 12 */
144 bool unusedBit_2_12 : 1 {};
145 /**
146 offset 0 bit 13 */
147 bool unusedBit_2_13 : 1 {};
148 /**
149 offset 0 bit 14 */
150 bool unusedBit_2_14 : 1 {};
151 /**
152 offset 0 bit 15 */
153 bool unusedBit_2_15 : 1 {};
154 /**
155 offset 0 bit 16 */
156 bool unusedBit_2_16 : 1 {};
157 /**
158 offset 0 bit 17 */
159 bool unusedBit_2_17 : 1 {};
160 /**
161 offset 0 bit 18 */
162 bool unusedBit_2_18 : 1 {};
163 /**
164 offset 0 bit 19 */
165 bool unusedBit_2_19 : 1 {};
166 /**
167 offset 0 bit 20 */
168 bool unusedBit_2_20 : 1 {};
169 /**
170 offset 0 bit 21 */
171 bool unusedBit_2_21 : 1 {};
172 /**
173 offset 0 bit 22 */
174 bool unusedBit_2_22 : 1 {};
175 /**
176 offset 0 bit 23 */
177 bool unusedBit_2_23 : 1 {};
178 /**
179 offset 0 bit 24 */
180 bool unusedBit_2_24 : 1 {};
181 /**
182 offset 0 bit 25 */
183 bool unusedBit_2_25 : 1 {};
184 /**
185 offset 0 bit 26 */
186 bool unusedBit_2_26 : 1 {};
187 /**
188 offset 0 bit 27 */
189 bool unusedBit_2_27 : 1 {};
190 /**
191 offset 0 bit 28 */
192 bool unusedBit_2_28 : 1 {};
193 /**
194 offset 0 bit 29 */
195 bool unusedBit_2_29 : 1 {};
196 /**
197 offset 0 bit 30 */
198 bool unusedBit_2_30 : 1 {};
199 /**
200 offset 0 bit 31 */
201 bool unusedBit_2_31 : 1 {};
202 /**
203 * 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.
204 * units: %
205 * offset 4
206 */
207 scaled_channel<uint8_t, 10, 1> deadband;
208 /**
209 * Maximum % that the long term fuel trim can add
210 * units: %
211 * offset 5
212 */
213 scaled_channel<uint8_t, 10, 1> maxAdd;
214 /**
215 * Maximum % that the long term fuel trim can remove
216 * units: %
217 * offset 6
218 */
219 scaled_channel<uint8_t, 10, 1> maxRemove;
220 /**
221 * need 4 byte alignment
222 * units: units
223 * offset 7
224 */
225 uint8_t alignmentFill_at_7[1] = {};
226 /**
227 * Commonly referred as Integral gain.
228 * Time constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 30.0 means it will try to make most of the correction within 30 seconds, and a value of 300.0 will try to correct within 5 minutes.
229 * Lower values makes the correction more sensitive, higher values slow the correction down.
230 * units: sec
231 * offset 8
232 */
233 scaled_channel<uint16_t, 1, 1> timeConstant;
234 /**
235 * need 4 byte alignment
236 * units: units
237 * offset 10
238 */
239 uint8_t alignmentFill_at_10[2] = {};
240};
241static_assert(sizeof(ltft_s) == 12);
242
243// start of pid_s
244struct pid_s {
245 /**
246 * offset 0
247 */
248 float pFactor;
249 /**
250 * offset 4
251 */
252 float iFactor;
253 /**
254 * offset 8
255 */
256 float dFactor;
257 /**
258 * Linear addition to PID logic
259 * offset 12
260 */
261 int16_t offset;
262 /**
263 * PID dTime
264 * units: ms
265 * offset 14
266 */
267 int16_t periodMs;
268 /**
269 * Output Min Duty Cycle
270 * offset 16
271 */
272 int16_t minValue;
273 /**
274 * Output Max Duty Cycle
275 * offset 18
276 */
277 int16_t maxValue;
278};
279static_assert(sizeof(pid_s) == 20);
280
281// start of MsIoBox_config_s
282struct MsIoBox_config_s {
283 /**
284 * offset 0
285 */
287 /**
288 * offset 1
289 */
291 /**
292 * need 4 byte alignment
293 * units: units
294 * offset 2
295 */
296 uint8_t alignmentFill_at_2[2] = {};
297};
298static_assert(sizeof(MsIoBox_config_s) == 4);
299
300// start of cranking_parameters_s
302 /**
303 * This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm.
304 * set cranking_rpm X
305 * units: RPM
306 * offset 0
307 */
308 int16_t rpm;
309 /**
310 * need 4 byte alignment
311 * units: units
312 * offset 2
313 */
314 uint8_t alignmentFill_at_2[2] = {};
315};
316static_assert(sizeof(cranking_parameters_s) == 4);
317
318// start of gppwm_channel
319struct gppwm_channel {
320 /**
321 * Select a pin to use for PWM or on-off output.
322 * offset 0
323 */
325 /**
326 * If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.
327 * This should be a safe value for whatever hardware is connected to prevent damage.
328 * units: %
329 * offset 2
330 */
331 uint8_t dutyIfError;
332 /**
333 * need 4 byte alignment
334 * units: units
335 * offset 3
336 */
337 uint8_t alignmentFill_at_3[1] = {};
338 /**
339 * Select a frequency to run PWM at.
340 * Set this to 0hz to enable on-off mode.
341 * units: hz
342 * offset 4
343 */
344 uint16_t pwmFrequency;
345 /**
346 * Hysteresis: in on-off mode, turn the output on when the table value is above this duty.
347 * units: %
348 * offset 6
349 */
350 uint8_t onAboveDuty;
351 /**
352 * Hysteresis: in on-off mode, turn the output off when the table value is below this duty.
353 * units: %
354 * offset 7
355 */
356 uint8_t offBelowDuty;
357 /**
358 * Selects the Y axis to use for the table.
359 * offset 8
360 */
362 /**
363 * Selects the X axis to use for the table.
364 * offset 9
365 */
367 /**
368 * offset 10
369 */
370 scaled_channel<int16_t, 2, 1> loadBins[GPPWM_LOAD_COUNT] = {};
371 /**
372 * offset 26
373 */
374 int16_t rpmBins[GPPWM_RPM_COUNT] = {};
375 /**
376 * units: duty
377 * offset 42
378 */
379 scaled_channel<uint8_t, 2, 1> table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT] = {};
380 /**
381 * need 4 byte alignment
382 * units: units
383 * offset 106
384 */
385 uint8_t alignmentFill_at_106[2] = {};
386};
387static_assert(sizeof(gppwm_channel) == 108);
388
389// start of air_pressure_sensor_config_s
391 /**
392 * kPa value at low volts
393 * units: kpa
394 * offset 0
395 */
396 float lowValue;
397 /**
398 * kPa value at high volts
399 * units: kpa
400 * offset 4
401 */
402 float highValue;
403 /**
404 * offset 8
405 */
407 /**
408 * offset 9
409 */
411 /**
412 * need 4 byte alignment
413 * units: units
414 * offset 10
415 */
416 uint8_t alignmentFill_at_10[2] = {};
417};
418static_assert(sizeof(air_pressure_sensor_config_s) == 12);
419
420// start of MAP_sensor_config_s
421struct MAP_sensor_config_s {
422 /**
423 * offset 0
424 */
425 float samplingAngleBins[MAP_ANGLE_SIZE] = {};
426 /**
427 * MAP averaging sampling start crank degree angle
428 * units: deg
429 * offset 32
430 */
431 float samplingAngle[MAP_ANGLE_SIZE] = {};
432 /**
433 * offset 64
434 */
435 float samplingWindowBins[MAP_WINDOW_SIZE] = {};
436 /**
437 * MAP averaging angle crank degree duration
438 * units: deg
439 * offset 96
440 */
441 float samplingWindow[MAP_WINDOW_SIZE] = {};
442 /**
443 * offset 128
444 */
446};
447static_assert(sizeof(MAP_sensor_config_s) == 140);
448
449/**
450 * @brief Thermistor known values
451
452*/
453// start of thermistor_conf_s
454struct thermistor_conf_s {
455 /**
456 * these values are in Celcius
457 * units: *C
458 * offset 0
459 */
460 float tempC_1;
461 /**
462 * units: *C
463 * offset 4
464 */
465 float tempC_2;
466 /**
467 * units: *C
468 * offset 8
469 */
470 float tempC_3;
471 /**
472 * units: Ohm
473 * offset 12
474 */
475 float resistance_1;
476 /**
477 * units: Ohm
478 * offset 16
479 */
480 float resistance_2;
481 /**
482 * units: Ohm
483 * offset 20
484 */
485 float resistance_3;
486 /**
487 * Pull-up resistor value on your board
488 * units: Ohm
489 * offset 24
490 */
491 float bias_resistor;
492};
493static_assert(sizeof(thermistor_conf_s) == 28);
494
495// start of linear_sensor_s
496struct linear_sensor_s {
497 /**
498 * offset 0
499 */
501 /**
502 * need 4 byte alignment
503 * units: units
504 * offset 1
505 */
506 uint8_t alignmentFill_at_1[3] = {};
507 /**
508 * units: volts
509 * offset 4
510 */
511 float v1;
512 /**
513 * offset 8
514 */
515 float value1;
516 /**
517 * units: volts
518 * offset 12
519 */
520 float v2;
521 /**
522 * offset 16
523 */
524 float value2;
525};
526static_assert(sizeof(linear_sensor_s) == 20);
527
528// start of ThermistorConf
529struct ThermistorConf {
530 /**
531 * offset 0
532 */
534 /**
535 * offset 28
536 */
538 /**
539 * need 4 byte alignment
540 * units: units
541 * offset 29
542 */
543 uint8_t alignmentFill_at_29[3] = {};
544};
545static_assert(sizeof(ThermistorConf) == 32);
546
547// start of injector_s
548struct injector_s {
549 /**
550 * This is your injector flow at the fuel pressure used in the vehicle
551 * See units setting below
552 * offset 0
553 */
554 float flow;
555 /**
556 * units: volts
557 * offset 4
558 */
559 scaled_channel<int16_t, 100, 1> battLagCorrBattBins[VBAT_INJECTOR_CURVE_SIZE] = {};
560 /**
561 * Injector correction pressure
562 * units: kPa
563 * offset 20
564 */
565 scaled_channel<uint32_t, 10, 1> battLagCorrPressBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE] = {};
566 /**
567 * ms delay between injector open and close dead times
568 * units: ms
569 * offset 28
570 */
571 scaled_channel<int16_t, 100, 1> battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE] = {};
572};
573static_assert(sizeof(injector_s) == 60);
574
575// start of trigger_config_s
576struct trigger_config_s {
577 /**
578 * https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers
579 * offset 0
580 */
582 /**
583 * units: number
584 * offset 4
585 */
587 /**
588 * units: number
589 * offset 8
590 */
592};
593static_assert(sizeof(trigger_config_s) == 12);
594
595// start of afr_sensor_s
596struct afr_sensor_s {
597 /**
598 * offset 0
599 */
601 /**
602 * offset 1
603 */
605 /**
606 * need 4 byte alignment
607 * units: units
608 * offset 2
609 */
610 uint8_t alignmentFill_at_2[2] = {};
611 /**
612 * units: volts
613 * offset 4
614 */
615 float v1;
616 /**
617 * units: AFR
618 * offset 8
619 */
620 float value1;
621 /**
622 * units: volts
623 * offset 12
624 */
625 float v2;
626 /**
627 * units: AFR
628 * offset 16
629 */
630 float value2;
631};
632static_assert(sizeof(afr_sensor_s) == 20);
633
634// start of idle_hardware_s
635struct idle_hardware_s {
636 /**
637 * units: Hz
638 * offset 0
639 */
641 /**
642 * offset 4
643 */
645 /**
646 * offset 6
647 */
649 /**
650 * offset 8
651 */
653 /**
654 * offset 10
655 */
657 /**
658 * need 4 byte alignment
659 * units: units
660 * offset 11
661 */
662 uint8_t alignmentFill_at_11[1] = {};
663};
664static_assert(sizeof(idle_hardware_s) == 12);
665
666// start of dc_io
667struct dc_io {
668 /**
669 * offset 0
670 */
672 /**
673 * offset 2
674 */
676 /**
677 * Acts as EN pin in two-wire mode
678 * offset 4
679 */
681 /**
682 * offset 6
683 */
685};
686static_assert(sizeof(dc_io) == 8);
687
688// start of vr_threshold_s
689struct vr_threshold_s {
690 /**
691 * units: rpm
692 * offset 0
693 */
694 scaled_channel<uint8_t, 1, 50> rpmBins[6] = {};
695 /**
696 * units: volts
697 * offset 6
698 */
699 scaled_channel<uint8_t, 100, 1> values[6] = {};
700 /**
701 * offset 12
702 */
703 Gpio pin;
704 /**
705 * need 4 byte alignment
706 * units: units
707 * offset 14
708 */
709 uint8_t alignmentFill_at_14[2] = {};
710};
711static_assert(sizeof(vr_threshold_s) == 16);
712
713// start of wbo_s
714struct wbo_s {
715 /**
716 * offset 0
717 */
719 /**
720 * offset 1
721 */
723 /**
724 * offset 2
725 */
727 /**
728 * need 4 byte alignment
729 * units: units
730 * offset 3
731 */
732 uint8_t alignmentFill_at_3[1] = {};
733};
734static_assert(sizeof(wbo_s) == 4);
735
736// start of engine_configuration_s
738 /**
739 * http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
740 * set engine_type X
741 * offset 0
742 */
744 /**
745 * offset 2
746 */
748 /**
749 * A secondary Rev limit engaged by the driver to help launch the vehicle faster
750 * units: rpm
751 * offset 4
752 */
753 uint16_t launchRpm;
754 /**
755 * set rpm_hard_limit X
756 * units: rpm
757 * offset 6
758 */
759 uint16_t rpmHardLimit;
760 /**
761 * Engine sniffer would be disabled above this rpm
762 * set engineSnifferRpmThreshold X
763 * units: RPM
764 * offset 8
765 */
767 /**
768 * Disable multispark above this engine speed.
769 * units: rpm
770 * offset 10
771 */
772 scaled_channel<uint8_t, 1, 50> multisparkMaxRpm;
773 /**
774 * Above this RPM, disable AC. Set to 0 to disable check.
775 * units: rpm
776 * offset 11
777 */
778 scaled_channel<uint8_t, 1, 50> maxAcRpm;
779 /**
780 * Above this TPS, disable AC. Set to 0 to disable check.
781 * units: %
782 * offset 12
783 */
784 uint8_t maxAcTps;
785 /**
786 * Above this CLT, disable AC to prevent overheating the engine. Set to 0 to disable check.
787 * units: deg C
788 * offset 13
789 */
790 uint8_t maxAcClt;
791 /**
792 * need 4 byte alignment
793 * units: units
794 * offset 14
795 */
796 uint8_t alignmentFill_at_14[2] = {};
797 /**
798 * Just for reference really, not taken into account by any logic at this point
799 * units: CR
800 * offset 16
801 */
802 float compressionRatio;
803 /**
804 * Voltage when the idle valve is closed.
805 * You probably don't have one of these!
806 * units: mv
807 * offset 20
808 */
809 uint16_t idlePositionMin;
810 /**
811 * Voltage when the idle valve is open.
812 * You probably don't have one of these!
813 * 1 volt = 1000 units
814 * units: mv
815 * offset 22
816 */
817 uint16_t idlePositionMax;
818 /**
819 * Enable LTIT (Long Term Idle Trim) learning
820 offset 24 bit 0 */
821 bool ltitEnabled : 1 {};
822 /**
823 offset 24 bit 1 */
824 bool unusedBit_14_1 : 1 {};
825 /**
826 offset 24 bit 2 */
827 bool unusedBit_14_2 : 1 {};
828 /**
829 offset 24 bit 3 */
830 bool unusedBit_14_3 : 1 {};
831 /**
832 offset 24 bit 4 */
833 bool unusedBit_14_4 : 1 {};
834 /**
835 offset 24 bit 5 */
836 bool unusedBit_14_5 : 1 {};
837 /**
838 offset 24 bit 6 */
839 bool unusedBit_14_6 : 1 {};
840 /**
841 offset 24 bit 7 */
842 bool unusedBit_14_7 : 1 {};
843 /**
844 offset 24 bit 8 */
845 bool unusedBit_14_8 : 1 {};
846 /**
847 offset 24 bit 9 */
848 bool unusedBit_14_9 : 1 {};
849 /**
850 offset 24 bit 10 */
851 bool unusedBit_14_10 : 1 {};
852 /**
853 offset 24 bit 11 */
854 bool unusedBit_14_11 : 1 {};
855 /**
856 offset 24 bit 12 */
857 bool unusedBit_14_12 : 1 {};
858 /**
859 offset 24 bit 13 */
860 bool unusedBit_14_13 : 1 {};
861 /**
862 offset 24 bit 14 */
863 bool unusedBit_14_14 : 1 {};
864 /**
865 offset 24 bit 15 */
866 bool unusedBit_14_15 : 1 {};
867 /**
868 offset 24 bit 16 */
869 bool unusedBit_14_16 : 1 {};
870 /**
871 offset 24 bit 17 */
872 bool unusedBit_14_17 : 1 {};
873 /**
874 offset 24 bit 18 */
875 bool unusedBit_14_18 : 1 {};
876 /**
877 offset 24 bit 19 */
878 bool unusedBit_14_19 : 1 {};
879 /**
880 offset 24 bit 20 */
881 bool unusedBit_14_20 : 1 {};
882 /**
883 offset 24 bit 21 */
884 bool unusedBit_14_21 : 1 {};
885 /**
886 offset 24 bit 22 */
887 bool unusedBit_14_22 : 1 {};
888 /**
889 offset 24 bit 23 */
890 bool unusedBit_14_23 : 1 {};
891 /**
892 offset 24 bit 24 */
893 bool unusedBit_14_24 : 1 {};
894 /**
895 offset 24 bit 25 */
896 bool unusedBit_14_25 : 1 {};
897 /**
898 offset 24 bit 26 */
899 bool unusedBit_14_26 : 1 {};
900 /**
901 offset 24 bit 27 */
902 bool unusedBit_14_27 : 1 {};
903 /**
904 offset 24 bit 28 */
905 bool unusedBit_14_28 : 1 {};
906 /**
907 offset 24 bit 29 */
908 bool unusedBit_14_29 : 1 {};
909 /**
910 offset 24 bit 30 */
911 bool unusedBit_14_30 : 1 {};
912 /**
913 offset 24 bit 31 */
914 bool unusedBit_14_31 : 1 {};
915 /**
916 * EMA filter constant for LTIT (0-255)
917 * units: 0-255
918 * offset 28
919 */
920 uint8_t ltitEmaAlpha;
921 /**
922 * RPM range to consider stable idle
923 * units: rpm
924 * offset 29
925 */
927 /**
928 * Minimum time of stable idle before learning
929 * units: s
930 * offset 30
931 */
932 uint8_t ltitStableTime;
933 /**
934 * LTIT learning rate
935 * units: %/s
936 * offset 31
937 */
938 uint8_t ltitCorrectionRate;
939 /**
940 * Delay after ignition ON before LTIT learning/application
941 * units: s
942 * offset 32
943 */
944 uint8_t ltitIgnitionOnDelay;
945 /**
946 * Delay after ignition OFF before LTIT save
947 * units: s
948 * offset 33
949 */
951 /**
952 * need 4 byte alignment
953 * units: units
954 * offset 34
955 */
956 uint8_t alignmentFill_at_34[2] = {};
957 /**
958 * Minimum LTIT multiplicative correction value
959 * units: %
960 * offset 36
961 */
962 float ltitClampMin;
963 /**
964 * Maximum LTIT multiplicative correction value
965 * units: %
966 * offset 40
967 */
968 float ltitClampMax;
969 /**
970 * LTIT table regional smoothing intensity (0=no smoothing)
971 * units: ratio
972 * offset 44
973 */
974 scaled_channel<uint8_t, 100, 1> ltitSmoothingIntensity;
975 /**
976 * need 4 byte alignment
977 * units: units
978 * offset 45
979 */
980 uint8_t alignmentFill_at_45[3] = {};
981 /**
982 * Minimum threshold of PID integrator for LTIT correction
983 * units: %
984 * offset 48
985 */
987 /**
988 * offset 52
989 */
991 /**
992 * offset 54
993 */
995 /**
996 * offset 56
997 */
999 /**
1000 * offset 58
1001 */
1002 Gpio canRxPin;
1003 /**
1004 * Pin that activates the reduction/cut for shifting. Sometimes shared with the Launch Control pin
1005 * offset 60
1006 */
1008 /**
1009 * units: %
1010 * offset 62
1011 */
1013 /**
1014 * Time after which the throttle is considered jammed.
1015 * units: sec
1016 * offset 63
1017 */
1018 scaled_channel<uint8_t, 50, 1> etbJamTimeout;
1019 /**
1020 * offset 64
1021 */
1023 /**
1024 * offset 66
1025 */
1027 /**
1028 * Additional idle % while A/C is active
1029 * units: %
1030 * offset 67
1031 */
1032 uint8_t acIdleExtraOffset;
1033 /**
1034 * 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.
1035 * units: deg
1036 * offset 68
1037 */
1039 /**
1040 * Configures the maximum number of extra sparks to fire (does not include main spark)
1041 * units: count
1042 * offset 69
1043 */
1045 /**
1046 * units: RPM
1047 * offset 70
1048 */
1049 int16_t vvtControlMinRpm;
1050 /**
1051 * offset 72
1052 */
1054 /**
1055 * offset 132
1056 */
1058 /**
1059 * Does the vehicle have a turbo or supercharger?
1060 offset 192 bit 0 */
1061 bool isForcedInduction : 1 {};
1062 /**
1063 * 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.
1064 offset 192 bit 1 */
1065 bool useFordRedundantTps : 1 {};
1066 /**
1067 offset 192 bit 2 */
1068 bool enableKline : 1 {};
1069 /**
1070 offset 192 bit 3 */
1071 bool overrideTriggerGaps : 1 {};
1072 /**
1073 * Turn on this fan when AC is on.
1074 offset 192 bit 4 */
1075 bool enableFan1WithAc : 1 {};
1076 /**
1077 * Turn on this fan when AC is on.
1078 offset 192 bit 5 */
1079 bool enableFan2WithAc : 1 {};
1080 /**
1081 * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
1082 offset 192 bit 6 */
1083 bool enableTrailingSparks : 1 {};
1084 /**
1085 * TLE7209 and L6205 use two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode.
1086 offset 192 bit 7 */
1087 bool etb_use_two_wires : 1 {};
1088 /**
1089 * 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.
1090 offset 192 bit 8 */
1091 bool isDoubleSolenoidIdle : 1 {};
1092 /**
1093 offset 192 bit 9 */
1094 bool useEeprom : 1 {};
1095 /**
1096 * Switch between Industrial and Cic PID implementation
1097 offset 192 bit 10 */
1098 bool useCicPidForIdle : 1 {};
1099 /**
1100 offset 192 bit 11 */
1101 bool useTLE8888_cranking_hack : 1 {};
1102 /**
1103 offset 192 bit 12 */
1104 bool kickStartCranking : 1 {};
1105 /**
1106 * This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).
1107 offset 192 bit 13 */
1109 /**
1110 offset 192 bit 14 */
1111 bool launchControlEnabled : 1 {};
1112 /**
1113 offset 192 bit 15 */
1114 bool antiLagEnabled : 1 {};
1115 /**
1116 * For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table).
1117 offset 192 bit 16 */
1118 bool useRunningMathForCranking : 1 {};
1119 /**
1120 * Shall we display real life signal or just the part consumed by trigger decoder.
1121 * Applies to both trigger and cam/vvt input.
1122 offset 192 bit 17 */
1124 /**
1125 offset 192 bit 18 */
1126 bool useTLE8888_stepper : 1 {};
1127 /**
1128 offset 192 bit 19 */
1130 /**
1131 * Print incoming and outgoing first bus CAN messages in rusEFI console
1132 offset 192 bit 20 */
1133 bool verboseCan : 1 {};
1134 /**
1135 * Experimental setting that will cause a misfire
1136 * DO NOT ENABLE.
1137 offset 192 bit 21 */
1138 bool artificialTestMisfire : 1 {};
1139 /**
1140 * 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.
1141 offset 192 bit 22 */
1142 bool useFordRedundantPps : 1 {};
1143 /**
1144 offset 192 bit 23 */
1145 bool cltSensorPulldown : 1 {};
1146 /**
1147 offset 192 bit 24 */
1148 bool iatSensorPulldown : 1 {};
1149 /**
1150 offset 192 bit 25 */
1151 bool allowIdenticalPps : 1 {};
1152 /**
1153 offset 192 bit 26 */
1154 bool overrideVvtTriggerGaps : 1 {};
1155 /**
1156 * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
1157 offset 192 bit 27 */
1158 bool useSpiImu : 1 {};
1159 /**
1160 offset 192 bit 28 */
1161 bool enableStagedInjection : 1 {};
1162 /**
1163 offset 192 bit 29 */
1164 bool useIdleAdvanceWhileCoasting : 1 {};
1165 /**
1166 offset 192 bit 30 */
1167 bool unusedBit_102_30 : 1 {};
1168 /**
1169 offset 192 bit 31 */
1170 bool unusedBit_102_31 : 1 {};
1171 /**
1172 * Closed throttle, 1 volt = 200 units.
1173 * See also tps1_1AdcChannel
1174 * units: ADC
1175 * offset 196
1176 */
1177 int16_t tpsMin;
1178 /**
1179 * Full throttle.
1180 * See also tps1_1AdcChannel
1181 * units: ADC
1182 * offset 198
1183 */
1184 int16_t tpsMax;
1185 /**
1186 * TPS error detection: what throttle % is unrealistically low?
1187 * Also used for accelerator pedal error detection if so equipped.
1188 * units: %
1189 * offset 200
1190 */
1192 /**
1193 * TPS error detection: what throttle % is unrealistically high?
1194 * Also used for accelerator pedal error detection if so equipped.
1195 * units: %
1196 * offset 202
1197 */
1199 /**
1200 * offset 204
1201 */
1203 /**
1204 * Dwell duration while cranking
1205 * units: ms
1206 * offset 208
1207 */
1209 /**
1210 * Once engine speed passes this value, start reducing ETB angle.
1211 * units: rpm
1212 * offset 212
1213 */
1214 uint16_t etbRevLimitStart;
1215 /**
1216 * 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.
1217 * units: rpm
1218 * offset 214
1219 */
1220 uint16_t etbRevLimitRange;
1221 /**
1222 * @see isMapAveragingEnabled
1223 * offset 216
1224 */
1226 /**
1227 * todo: merge with channel settings, use full-scale Thermistor here!
1228 * offset 356
1229 */
1231 /**
1232 * offset 388
1233 */
1235 /**
1236 * units: deg
1237 * offset 420
1238 */
1239 float launchTimingRetard;
1240 /**
1241 * Maximum commanded airmass for the idle controller.
1242 * units: mg
1243 * offset 424
1244 */
1245 scaled_channel<uint8_t, 1, 2> idleMaximumAirmass;
1246 /**
1247 * Zero value means do not detect tuning
1248 * units: seconds
1249 * offset 425
1250 */
1251 uint8_t tuningDetector;
1252 /**
1253 * iTerm min value
1254 * offset 426
1255 */
1256 int16_t alternator_iTermMin;
1257 /**
1258 * iTerm max value
1259 * offset 428
1260 */
1261 int16_t alternator_iTermMax;
1262 /**
1263 * need 4 byte alignment
1264 * units: units
1265 * offset 430
1266 */
1267 uint8_t alignmentFill_at_430[2] = {};
1268 /**
1269 * @@DISPLACEMENT_TOOLTIP@@
1270 * units: L
1271 * offset 432
1272 */
1273 float displacement;
1274 /**
1275 * units: RPM
1276 * offset 436
1277 */
1278 uint16_t triggerSimulatorRpm;
1279 /**
1280 * need 4 byte alignment
1281 * units: units
1282 * offset 438
1283 */
1284 uint8_t alignmentFill_at_438[2] = {};
1285 /**
1286 * Number of cylinder the engine has.
1287 * offset 440
1288 */
1289 uint32_t cylindersCount;
1290 /**
1291 * offset 444
1292 */
1294 /**
1295 * offset 445
1296 */
1297 uint8_t justATempTest;
1298 /**
1299 * Delta kPa for MAP sync
1300 * units: kPa
1301 * offset 446
1302 */
1303 uint8_t mapSyncThreshold;
1304 /**
1305 * need 4 byte alignment
1306 * units: units
1307 * offset 447
1308 */
1309 uint8_t alignmentFill_at_447[1] = {};
1310 /**
1311 * @@CYLINDER_BORE_TOOLTIP@@
1312 * units: mm
1313 * offset 448
1314 */
1315 float cylinderBore;
1316 /**
1317 * This setting controls which fuel quantity control algorithm is used.
1318 * Alpha-N means drive by TPS commonly only used for NA engines
1319 * Speed Density requires MAP sensor and is the default choice for may installs
1320 * MAF air charge is a cylinder filling based method that uses a mass air flow sensor.
1321 * offset 452
1322 */
1324 /**
1325 * units: %
1326 * offset 453
1327 */
1328 uint8_t ALSMaxTPS;
1329 /**
1330 * This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous".
1331 * offset 454
1332 */
1334 /**
1335 * 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.
1336 * offset 455
1337 */
1339 /**
1340 * Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1341 * offset 456
1342 */
1343 uint16_t boostControlMinRpm;
1344 /**
1345 * Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1346 * offset 458
1347 */
1348 uint8_t boostControlMinTps;
1349 /**
1350 * need 4 byte alignment
1351 * units: units
1352 * offset 459
1353 */
1354 uint8_t alignmentFill_at_459[1] = {};
1355 /**
1356 * Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1357 * offset 460
1358 */
1359 uint16_t boostControlMinMap;
1360 /**
1361 * Wastegate control Solenoid, set to 'NONE' if you are using DC wastegate
1362 * offset 462
1363 */
1365 /**
1366 * offset 464
1367 */
1369 /**
1370 * need 4 byte alignment
1371 * units: units
1372 * offset 465
1373 */
1374 uint8_t alignmentFill_at_465[3] = {};
1375 /**
1376 * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.
1377 * There is tapering towards running timing advance
1378 * set cranking_timing_angle X
1379 * units: deg
1380 * offset 468
1381 */
1383 /**
1384 * Single coil = distributor
1385 * Individual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode
1386 * Wasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder
1387 * Two distributors = A pair of distributors, found on some BMW, Toyota and other engines
1388 * set ignition_mode X
1389 * offset 472
1390 */
1392 /**
1393 * How many consecutive gap rations have to match expected ranges for sync to happen
1394 * units: count
1395 * offset 473
1396 */
1398 /**
1399 * Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).
1400 * units: kph
1401 * offset 474
1402 */
1403 uint8_t maxIdleVss;
1404 /**
1405 * Allowed range around detection position
1406 * offset 475
1407 */
1408 uint8_t camDecoder2jzPrecision;
1409 /**
1410 * 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.
1411 * units: kPa
1412 * offset 476
1413 */
1414 uint16_t minOilPressureAfterStart;
1415 /**
1416 * Dynamic uses the timing map to decide the ignition timing
1417 * Static timing fixes the timing to the value set below (only use for checking static timing with a timing light).
1418 * offset 478
1419 */
1421 /**
1422 * offset 479
1423 */
1425 /**
1426 * This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing
1427 * This mode is useful when adjusting distributor location.
1428 * units: RPM
1429 * offset 480
1430 */
1432 /**
1433 * Angle between Top Dead Center (TDC) and the first trigger event.
1434 * Positive value in case of synchronization point before TDC and negative in case of synchronization point after TDC
1435 * .Knowing this angle allows us to control timing and other angles in reference to TDC.
1436 * HOWTO:
1437 * 1: Switch to fixed timing mode on 'ignition setting' dialog
1438 * 2: use an actual timing light to calibrate
1439 * 3: add/subtract until timing light confirms desired fixed timing value!'
1440 * units: deg btdc
1441 * offset 484
1442 */
1444 /**
1445 * 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.
1446 * units: coef
1447 * offset 488
1448 */
1450 /**
1451 * 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.
1452 * units: coef
1453 * offset 492
1454 */
1455 float vbattDividerCoeff;
1456 /**
1457 * offset 496
1458 */
1460 /**
1461 * offset 498
1462 */
1464 /**
1465 * Cooling fan turn-on temperature threshold, in Celsius
1466 * units: deg C
1467 * offset 499
1468 */
1470 /**
1471 * Cooling fan turn-off temperature threshold, in Celsius
1472 * units: deg C
1473 * offset 500
1474 */
1476 /**
1477 * need 4 byte alignment
1478 * units: units
1479 * offset 501
1480 */
1481 uint8_t alignmentFill_at_501[1] = {};
1482 /**
1483 * offset 502
1484 */
1486 /**
1487 * offset 504
1488 */
1490 /**
1491 * Cooling fan turn-on temperature threshold, in Celsius
1492 * units: deg C
1493 * offset 505
1494 */
1496 /**
1497 * Cooling fan turn-off temperature threshold, in Celsius
1498 * units: deg C
1499 * offset 506
1500 */
1502 /**
1503 * offset 507
1504 */
1505 int8_t disableFan1AtSpeed;
1506 /**
1507 * offset 508
1508 */
1509 int8_t disableFan2AtSpeed;
1510 /**
1511 * need 4 byte alignment
1512 * units: units
1513 * offset 509
1514 */
1515 uint8_t alignmentFill_at_509[3] = {};
1516 /**
1517 * Inhibit operation of this fan while the engine is not running.
1518 offset 512 bit 0 */
1519 bool disableFan1WhenStopped : 1 {};
1520 /**
1521 * Inhibit operation of this fan while the engine is not running.
1522 offset 512 bit 1 */
1523 bool disableFan2WhenStopped : 1 {};
1524 /**
1525 offset 512 bit 2 */
1526 bool unusedBit_167_2 : 1 {};
1527 /**
1528 offset 512 bit 3 */
1529 bool unusedBit_167_3 : 1 {};
1530 /**
1531 offset 512 bit 4 */
1532 bool unusedBit_167_4 : 1 {};
1533 /**
1534 offset 512 bit 5 */
1535 bool unusedBit_167_5 : 1 {};
1536 /**
1537 offset 512 bit 6 */
1538 bool unusedBit_167_6 : 1 {};
1539 /**
1540 offset 512 bit 7 */
1541 bool unusedBit_167_7 : 1 {};
1542 /**
1543 offset 512 bit 8 */
1544 bool unusedBit_167_8 : 1 {};
1545 /**
1546 offset 512 bit 9 */
1547 bool unusedBit_167_9 : 1 {};
1548 /**
1549 offset 512 bit 10 */
1550 bool unusedBit_167_10 : 1 {};
1551 /**
1552 offset 512 bit 11 */
1553 bool unusedBit_167_11 : 1 {};
1554 /**
1555 offset 512 bit 12 */
1556 bool unusedBit_167_12 : 1 {};
1557 /**
1558 offset 512 bit 13 */
1559 bool unusedBit_167_13 : 1 {};
1560 /**
1561 offset 512 bit 14 */
1562 bool unusedBit_167_14 : 1 {};
1563 /**
1564 offset 512 bit 15 */
1565 bool unusedBit_167_15 : 1 {};
1566 /**
1567 offset 512 bit 16 */
1568 bool unusedBit_167_16 : 1 {};
1569 /**
1570 offset 512 bit 17 */
1571 bool unusedBit_167_17 : 1 {};
1572 /**
1573 offset 512 bit 18 */
1574 bool unusedBit_167_18 : 1 {};
1575 /**
1576 offset 512 bit 19 */
1577 bool unusedBit_167_19 : 1 {};
1578 /**
1579 offset 512 bit 20 */
1580 bool unusedBit_167_20 : 1 {};
1581 /**
1582 offset 512 bit 21 */
1583 bool unusedBit_167_21 : 1 {};
1584 /**
1585 offset 512 bit 22 */
1586 bool unusedBit_167_22 : 1 {};
1587 /**
1588 offset 512 bit 23 */
1589 bool unusedBit_167_23 : 1 {};
1590 /**
1591 offset 512 bit 24 */
1592 bool unusedBit_167_24 : 1 {};
1593 /**
1594 offset 512 bit 25 */
1595 bool unusedBit_167_25 : 1 {};
1596 /**
1597 offset 512 bit 26 */
1598 bool unusedBit_167_26 : 1 {};
1599 /**
1600 offset 512 bit 27 */
1601 bool unusedBit_167_27 : 1 {};
1602 /**
1603 offset 512 bit 28 */
1604 bool unusedBit_167_28 : 1 {};
1605 /**
1606 offset 512 bit 29 */
1607 bool unusedBit_167_29 : 1 {};
1608 /**
1609 offset 512 bit 30 */
1610 bool unusedBit_167_30 : 1 {};
1611 /**
1612 offset 512 bit 31 */
1613 bool unusedBit_167_31 : 1 {};
1614 /**
1615 * offset 516
1616 */
1618 /**
1619 * need 4 byte alignment
1620 * units: units
1621 * offset 518
1622 */
1623 uint8_t alignmentFill_at_518[2] = {};
1624 /**
1625 * 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.
1626 * units: revs/km
1627 * offset 520
1628 */
1629 float driveWheelRevPerKm;
1630 /**
1631 * CANbus thread period in ms
1632 * units: ms
1633 * offset 524
1634 */
1635 int canSleepPeriodMs;
1636 /**
1637 * units: index
1638 * offset 528
1639 */
1641 /**
1642 * First throttle body, first sensor. See also pedalPositionAdcChannel
1643 * Analog TPS inputs have 200Hz low-pass cutoff.
1644 * offset 532
1645 */
1647 /**
1648 * 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.
1649 * offset 533
1650 */
1652 /**
1653 * 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.
1654 * offset 534
1655 */
1657 /**
1658 * Second throttle body position sensor, single channel so far
1659 * offset 535
1660 */
1662 /**
1663 * 0.1 is a good default value
1664 * units: x
1665 * offset 536
1666 */
1668 /**
1669 * offset 540
1670 */
1672 /**
1673 * Extra air taper amount
1674 * units: %
1675 * offset 552
1676 */
1677 float airByRpmTaper;
1678 /**
1679 * 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.
1680 * units: %
1681 * offset 556
1682 */
1684 /**
1685 * offset 557
1686 */
1688 /**
1689 * offset 558
1690 */
1691 uint8_t acrRevolutions;
1692 /**
1693 * need 4 byte alignment
1694 * units: units
1695 * offset 559
1696 */
1697 uint8_t alignmentFill_at_559[1] = {};
1698 /**
1699 * offset 560
1700 */
1702 /**
1703 * units: volts
1704 * offset 564
1705 */
1706 float adcVcc;
1707 /**
1708 * Magic engine phase: we compare instant MAP at X to instant MAP at x+360 angle in one complete cycle
1709 * units: Deg
1710 * offset 568
1711 */
1713 /**
1714 * 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.
1715 * offset 572
1716 */
1717 brain_input_pin_e camInputs[CAM_INPUTS_COUNT] = {};
1718 /**
1719 * offset 580
1720 */
1722 /**
1723 * Electronic throttle pedal position first channel
1724 * See throttlePedalPositionSecondAdcChannel for second channel
1725 * See also tps1_1AdcChannel
1726 * See throttlePedalUpVoltage and throttlePedalWOTVoltage
1727 * offset 600
1728 */
1730 /**
1731 * TPS/PPS error threshold
1732 * units: %
1733 * offset 601
1734 */
1735 scaled_channel<uint8_t, 10, 1> etbSplit;
1736 /**
1737 * offset 602
1738 */
1740 /**
1741 * offset 604
1742 */
1744 /**
1745 * offset 605
1746 */
1748 /**
1749 * need 4 byte alignment
1750 * units: units
1751 * offset 606
1752 */
1753 uint8_t alignmentFill_at_606[2] = {};
1754 /**
1755 * @see hasBaroSensor
1756 * offset 608
1757 */
1759 /**
1760 * offset 620
1761 */
1763 /**
1764 * Ignition timing to remove when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
1765 * units: %
1766 * offset 632
1767 */
1768 scaled_channel<uint8_t, 10, 1> knockRetardAggression;
1769 /**
1770 * After a knock event, reapply timing at this rate.
1771 * units: deg/s
1772 * offset 633
1773 */
1774 scaled_channel<uint8_t, 10, 1> knockRetardReapplyRate;
1775 /**
1776 * Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync.
1777 * offset 634
1778 */
1780 /**
1781 * offset 635
1782 */
1784 /**
1785 * 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.
1786 * units: ratio
1787 * offset 636
1788 */
1789 scaled_channel<uint16_t, 1000, 1> vssGearRatio;
1790 /**
1791 * Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response.
1792 * offset 638
1793 */
1794 uint8_t vssFilterReciprocal;
1795 /**
1796 * 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.
1797 * units: count
1798 * offset 639
1799 */
1800 uint8_t vssToothCount;
1801 /**
1802 * Override the Y axis (load) value used for only the Idle VE table.
1803 * Advanced users only: If you aren't sure you need this, you probably don't need this.
1804 * offset 640
1805 */
1807 /**
1808 * need 4 byte alignment
1809 * units: units
1810 * offset 641
1811 */
1812 uint8_t alignmentFill_at_641[1] = {};
1813 /**
1814 * offset 642
1815 */
1816 Gpio l9779_cs;
1817 /**
1818 * offset 644
1819 */
1820 output_pin_e injectionPins[MAX_CYLINDER_COUNT] = {};
1821 /**
1822 * offset 668
1823 */
1824 output_pin_e ignitionPins[MAX_CYLINDER_COUNT] = {};
1825 /**
1826 * offset 692
1827 */
1829 /**
1830 * offset 693
1831 */
1833 /**
1834 * offset 694
1835 */
1837 /**
1838 * offset 696
1839 */
1841 /**
1842 * How many consecutive VVT gap rations have to match expected ranges for sync to happen
1843 * units: count
1844 * offset 697
1845 */
1847 /**
1848 * Check engine light, also malfunction indicator light. Always blinks once on boot.
1849 * offset 698
1850 */
1852 /**
1853 * offset 700
1854 */
1856 /**
1857 * need 4 byte alignment
1858 * units: units
1859 * offset 701
1860 */
1861 uint8_t alignmentFill_at_701[1] = {};
1862 /**
1863 * Some cars have a switch to indicate that clutch pedal is all the way down
1864 * offset 702
1865 */
1867 /**
1868 * offset 704
1869 */
1871 /**
1872 * offset 706
1873 */
1875 /**
1876 * offset 707
1877 */
1879 /**
1880 * offset 708
1881 */
1882 Gpio digitalPotentiometerChipSelect[DIGIPOT_COUNT] = {};
1883 /**
1884 * offset 716
1885 */
1887 /**
1888 * offset 717
1889 */
1891 /**
1892 * offset 718
1893 */
1895 /**
1896 * Digital Potentiometer is used by stock ECU stimulation code
1897 * offset 720
1898 */
1900 /**
1901 * offset 721
1902 */
1904 /**
1905 * offset 722
1906 */
1908 /**
1909 * offset 724
1910 */
1912 /**
1913 * Useful in Research&Development phase
1914 * offset 725
1915 */
1917 /**
1918 * First throttle body, second sensor.
1919 * offset 726
1920 */
1922 /**
1923 * Second throttle body, second sensor.
1924 * offset 727
1925 */
1927 /**
1928 * Electronic throttle pedal position input
1929 * Second channel
1930 * See also tps1_1AdcChannel
1931 * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
1932 * offset 728
1933 */
1935 /**
1936 * AFR, WBO, EGO - whatever you like to call it
1937 * offset 729
1938 */
1940 /**
1941 * offset 730
1942 */
1943 Gpio mc33810_cs[C_MC33810_COUNT] = {};
1944 /**
1945 * 0.1 is a good default value
1946 * units: x
1947 * offset 732
1948 */
1949 float idle_antiwindupFreq;
1950 /**
1951 * offset 736
1952 */
1953 brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT] = {};
1954 /**
1955 * 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.
1956 * units: us
1957 * offset 740
1958 */
1959 uint16_t mc33_t_min_boost;
1960 /**
1961 * Ratio between the wheels and your transmission output.
1962 * units: ratio
1963 * offset 742
1964 */
1965 scaled_channel<uint16_t, 100, 1> finalGearRatio;
1966 /**
1967 * offset 744
1968 */
1970 /**
1971 * offset 746
1972 */
1974 /**
1975 * need 4 byte alignment
1976 * units: units
1977 * offset 747
1978 */
1979 uint8_t alignmentFill_at_747[1] = {};
1980 /**
1981 * 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.
1982 * See also directSelfStimulation which is different.
1983 * offset 748
1984 */
1985 Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT] = {};
1986 /**
1987 * units: g/s
1988 * offset 752
1989 */
1990 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
1991 /**
1992 * offset 754
1993 */
1994 pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT] = {};
1995 /**
1996 * offset 756
1997 */
1999 /**
2000 * need 4 byte alignment
2001 * units: units
2002 * offset 757
2003 */
2004 uint8_t alignmentFill_at_757[1] = {};
2005 /**
2006 * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
2007 * offset 758
2008 */
2010 /**
2011 * offset 760
2012 */
2014 /**
2015 * units: RPM
2016 * offset 761
2017 */
2018 scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
2019 /**
2020 * units: %
2021 * offset 762
2022 */
2023 scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
2024 /**
2025 * need 4 byte alignment
2026 * units: units
2027 * offset 763
2028 */
2029 uint8_t alignmentFill_at_763[1] = {};
2030 /**
2031 offset 764 bit 0 */
2032 bool is_enabled_spi_1 : 1 {};
2033 /**
2034 offset 764 bit 1 */
2035 bool is_enabled_spi_2 : 1 {};
2036 /**
2037 offset 764 bit 2 */
2038 bool is_enabled_spi_3 : 1 {};
2039 /**
2040 * enable sd/disable sd
2041 offset 764 bit 3 */
2042 bool isSdCardEnabled : 1 {};
2043 /**
2044 * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
2045 offset 764 bit 4 */
2046 bool rusefiVerbose29b : 1 {};
2047 /**
2048 offset 764 bit 5 */
2049 bool rethrowHardFault : 1 {};
2050 /**
2051 offset 764 bit 6 */
2053 /**
2054 offset 764 bit 7 */
2055 bool verboseQuad : 1 {};
2056 /**
2057 * This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed.
2058 offset 764 bit 8 */
2059 bool useStepperIdle : 1 {};
2060 /**
2061 offset 764 bit 9 */
2062 bool enabledStep1Limiter : 1 {};
2063 /**
2064 offset 764 bit 10 */
2065 bool lambdaProtectionEnable : 1 {};
2066 /**
2067 offset 764 bit 11 */
2068 bool verboseTLE8888 : 1 {};
2069 /**
2070 * CAN broadcast using custom rusEFI protocol
2071 offset 764 bit 12 */
2072 bool enableVerboseCanTx : 1 {};
2073 /**
2074 offset 764 bit 13 */
2075 bool externalRusEfiGdiModule : 1 {};
2076 /**
2077 offset 764 bit 14 */
2078 bool unusedFlipWboChannels : 1 {};
2079 /**
2080 * Useful for individual intakes
2081 offset 764 bit 15 */
2082 bool measureMapOnlyInOneCylinder : 1 {};
2083 /**
2084 offset 764 bit 16 */
2086 /**
2087 * 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.
2088 offset 764 bit 17 */
2089 bool isFasterEngineSpinUpEnabled : 1 {};
2090 /**
2091 * This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing.
2092 offset 764 bit 18 */
2093 bool coastingFuelCutEnabled : 1 {};
2094 /**
2095 * 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.
2096 offset 764 bit 19 */
2097 bool useIacTableForCoasting : 1 {};
2098 /**
2099 offset 764 bit 20 */
2100 bool useNoiselessTriggerDecoder : 1 {};
2101 /**
2102 offset 764 bit 21 */
2103 bool useIdleTimingPidControl : 1 {};
2104 /**
2105 * 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.
2106 offset 764 bit 22 */
2107 bool disableEtbWhenEngineStopped : 1 {};
2108 /**
2109 offset 764 bit 23 */
2110 bool is_enabled_spi_4 : 1 {};
2111 /**
2112 * Disable the electronic throttle motor and DC idle motor for testing.
2113 * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle.
2114 offset 764 bit 24 */
2115 bool pauseEtbControl : 1 {};
2116 /**
2117 offset 764 bit 25 */
2118 bool verboseKLine : 1 {};
2119 /**
2120 offset 764 bit 26 */
2121 bool idleIncrementalPidCic : 1 {};
2122 /**
2123 * AEM X-Series or rusEFI Wideband
2124 offset 764 bit 27 */
2125 bool enableAemXSeries : 1 {};
2126 /**
2127 offset 764 bit 28 */
2128 bool modeledFlowIdle : 1 {};
2129 /**
2130 offset 764 bit 29 */
2131 bool unusedBit_310_29 : 1 {};
2132 /**
2133 offset 764 bit 30 */
2134 bool unusedBit_310_30 : 1 {};
2135 /**
2136 offset 764 bit 31 */
2137 bool unusedBit_310_31 : 1 {};
2138 /**
2139 * offset 768
2140 */
2141 brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT] = {};
2142 /**
2143 * offset 776
2144 */
2146 /**
2147 * need 4 byte alignment
2148 * units: units
2149 * offset 777
2150 */
2151 uint8_t alignmentFill_at_777[3] = {};
2152 /**
2153 * offset 780
2154 */
2155 uint32_t verboseCanBaseAddress;
2156 /**
2157 * Boost Voltage
2158 * units: v
2159 * offset 784
2160 */
2161 uint8_t mc33_hvolt;
2162 /**
2163 * need 4 byte alignment
2164 * units: units
2165 * offset 785
2166 */
2167 uint8_t alignmentFill_at_785[1] = {};
2168 /**
2169 * Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost.
2170 * units: kPa
2171 * offset 786
2172 */
2174 /**
2175 * units: %
2176 * offset 788
2177 */
2179 /**
2180 * units: %
2181 * offset 789
2182 */
2184 /**
2185 * offset 790
2186 */
2188 /**
2189 * offset 791
2190 */
2192 /**
2193 * offset 792
2194 */
2196 /**
2197 * need 4 byte alignment
2198 * units: units
2199 * offset 793
2200 */
2201 uint8_t alignmentFill_at_793[1] = {};
2202 /**
2203 * How far above idle speed do we consider idling, i.e. coasting detection threshold.
2204 * For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.
2205 * units: RPM
2206 * offset 794
2207 */
2208 int16_t idlePidRpmUpperLimit;
2209 /**
2210 * Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment.
2211 * units: ms
2212 * offset 796
2213 */
2214 scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
2215 /**
2216 * offset 798
2217 */
2219 /**
2220 * offset 800
2221 */
2223 /**
2224 * offset 802
2225 */
2227 /**
2228 * Some vehicles have a switch to indicate that clutch pedal is all the way up
2229 * offset 804
2230 */
2232 /**
2233 * offset 806
2234 */
2236 /**
2237 * offset 807
2238 */
2240 /**
2241 * offset 808
2242 */
2243 Gpio max31855_cs[EGT_CHANNEL_COUNT] = {};
2244 /**
2245 * Continental/GM flex fuel sensor, 50-150hz type
2246 * offset 824
2247 */
2249 /**
2250 * Since torque reduction pin is usually shared with launch control, most people have an RPM where behavior under that is Launch Control, over that is Flat Shift/Torque Reduction
2251 * units: rpm
2252 * offset 826
2253 */
2254 uint16_t torqueReductionArmingRpm;
2255 /**
2256 * offset 828
2257 */
2259 /**
2260 * offset 829
2261 */
2263 /**
2264 * Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0
2265 * units: :1
2266 * offset 830
2267 */
2268 scaled_channel<uint8_t, 10, 1> stoichRatioSecondary;
2269 /**
2270 * Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open.
2271 * units: %
2272 * offset 831
2273 */
2274 uint8_t etbMaximumPosition;
2275 /**
2276 * Rate the ECU will log to the SD card, in hz (log lines per second).
2277 * units: hz
2278 * offset 832
2279 */
2280 uint16_t sdCardLogFrequency;
2281 /**
2282 * offset 834
2283 */
2285 /**
2286 * need 4 byte alignment
2287 * units: units
2288 * offset 835
2289 */
2290 uint8_t alignmentFill_at_835[1] = {};
2291 /**
2292 * offset 836
2293 */
2294 uint16_t launchCorrectionsEndRpm;
2295 /**
2296 * offset 838
2297 */
2299 /**
2300 * On some vehicles we can disable starter once engine is already running
2301 * offset 840
2302 */
2304 /**
2305 * need 4 byte alignment
2306 * units: units
2307 * offset 841
2308 */
2309 uint8_t alignmentFill_at_841[1] = {};
2310 /**
2311 * Some Subaru and some Mazda use double-solenoid idle air valve
2312 * offset 842
2313 */
2315 /**
2316 * See also starterControlPin
2317 * offset 844
2318 */
2320 /**
2321 * units: RPM
2322 * offset 846
2323 */
2324 scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
2325 /**
2326 * offset 847
2327 */
2329 /**
2330 * 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.
2331 * units: count
2332 * offset 848
2333 */
2335 /**
2336 * 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%.
2337 * units: %
2338 * offset 852
2339 */
2341 /**
2342 * units: %
2343 * offset 854
2344 */
2346 /**
2347 * units: ADC
2348 * offset 856
2349 */
2351 /**
2352 * units: ADC
2353 * offset 858
2354 */
2356 /**
2357 * units: rpm
2358 * offset 860
2359 */
2361 /**
2362 * Maximum time to crank starter when start/stop button is pressed
2363 * units: Seconds
2364 * offset 862
2365 */
2366 uint16_t startCrankingDuration;
2367 /**
2368 * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
2369 * offset 864
2370 */
2372 /**
2373 * offset 866
2374 */
2376 /**
2377 * need 4 byte alignment
2378 * units: units
2379 * offset 867
2380 */
2381 uint8_t alignmentFill_at_867[1] = {};
2382 /**
2383 * offset 868
2384 */
2386 /**
2387 * units: %
2388 * offset 870
2389 */
2390 uint8_t lambdaProtectionMinTps;
2391 /**
2392 * Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed
2393 * units: s
2394 * offset 871
2395 */
2396 scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
2397 /**
2398 * offset 872
2399 */
2400 script_setting_t scriptSetting[SCRIPT_SETTING_COUNT] = {};
2401 /**
2402 * offset 904
2403 */
2405 /**
2406 * offset 906
2407 */
2409 /**
2410 * offset 908
2411 */
2413 /**
2414 * offset 910
2415 */
2417 /**
2418 * offset 912
2419 */
2421 /**
2422 * offset 914
2423 */
2425 /**
2426 * offset 916
2427 */
2429 /**
2430 * offset 918
2431 */
2433 /**
2434 * offset 920
2435 */
2437 /**
2438 * UNUSED
2439 * Will remove in 2026 for sure
2440 * Saab Combustion Detection Module knock signal input pin
2441 * also known as Saab Ion Sensing Module
2442 * offset 922
2443 */
2445 /**
2446 * offset 924
2447 */
2449 /**
2450 * offset 925
2451 */
2452 maf_sensor_type_e mafSensorType;
2453 /**
2454 * need 4 byte alignment
2455 * units: units
2456 * offset 926
2457 */
2458 uint8_t alignmentFill_at_926[2] = {};
2459 /**
2460 * Ramp the idle target down from the entry threshold over N seconds when returning to idle. Helps prevent overshooting (below) the idle target while returning to idle from coasting.
2461 offset 928 bit 0 */
2462 bool idleReturnTargetRamp : 1 {};
2463 /**
2464 offset 928 bit 1 */
2466 /**
2467 * If enabled we use two H-bridges to drive stepper idle air valve
2468 offset 928 bit 2 */
2470 /**
2471 offset 928 bit 3 */
2472 bool multisparkEnable : 1 {};
2473 /**
2474 offset 928 bit 4 */
2475 bool enableLaunchRetard : 1 {};
2476 /**
2477 offset 928 bit 5 */
2478 bool canInputBCM : 1 {};
2479 /**
2480 * This property is useful if using rusEFI as TCM or BCM only
2481 offset 928 bit 6 */
2482 bool consumeObdSensors : 1 {};
2483 /**
2484 * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
2485 offset 928 bit 7 */
2486 bool enableCanVss : 1 {};
2487 /**
2488 * 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.
2489 offset 928 bit 8 */
2490 bool stftIgnoreErrorMagnitude : 1 {};
2491 /**
2492 offset 928 bit 9 */
2494 /**
2495 offset 928 bit 10 */
2496 bool enableSoftwareKnock : 1 {};
2497 /**
2498 * Verbose info in console below engineSnifferRpmThreshold
2499 offset 928 bit 11 */
2500 bool verboseVVTDecoding : 1 {};
2501 /**
2502 offset 928 bit 12 */
2503 bool invertCamVVTSignal : 1 {};
2504 /**
2505 * In Alpha-N mode, compensate for air temperature.
2506 offset 928 bit 13 */
2507 bool alphaNUseIat : 1 {};
2508 /**
2509 offset 928 bit 14 */
2510 bool knockBankCyl1 : 1 {};
2511 /**
2512 offset 928 bit 15 */
2513 bool knockBankCyl2 : 1 {};
2514 /**
2515 offset 928 bit 16 */
2516 bool knockBankCyl3 : 1 {};
2517 /**
2518 offset 928 bit 17 */
2519 bool knockBankCyl4 : 1 {};
2520 /**
2521 offset 928 bit 18 */
2522 bool knockBankCyl5 : 1 {};
2523 /**
2524 offset 928 bit 19 */
2525 bool knockBankCyl6 : 1 {};
2526 /**
2527 offset 928 bit 20 */
2528 bool knockBankCyl7 : 1 {};
2529 /**
2530 offset 928 bit 21 */
2531 bool knockBankCyl8 : 1 {};
2532 /**
2533 offset 928 bit 22 */
2534 bool knockBankCyl9 : 1 {};
2535 /**
2536 offset 928 bit 23 */
2537 bool knockBankCyl10 : 1 {};
2538 /**
2539 offset 928 bit 24 */
2540 bool knockBankCyl11 : 1 {};
2541 /**
2542 offset 928 bit 25 */
2543 bool knockBankCyl12 : 1 {};
2544 /**
2545 offset 928 bit 26 */
2546 bool tcuEnabled : 1 {};
2547 /**
2548 offset 928 bit 27 */
2549 bool canBroadcastUseChannelTwo : 1 {};
2550 /**
2551 * If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils
2552 offset 928 bit 28 */
2554 /**
2555 * Print incoming and outgoing second bus CAN messages in rusEFI console
2556 offset 928 bit 29 */
2557 bool verboseCan2 : 1 {};
2558 /**
2559 offset 928 bit 30 */
2560 bool unusedBit_409_30 : 1 {};
2561 /**
2562 offset 928 bit 31 */
2563 bool unusedBit_409_31 : 1 {};
2564 /**
2565 * offset 932
2566 */
2567 dc_io etbIo[ETB_COUNT] = {};
2568 /**
2569 * offset 948
2570 */
2572 /**
2573 * offset 950
2574 */
2576 /**
2577 * offset 952
2578 */
2580 /**
2581 * offset 972
2582 */
2584 /**
2585 * offset 973
2586 */
2588 /**
2589 * offset 974
2590 */
2592 /**
2593 * units: Hz
2594 * offset 976
2595 */
2597 /**
2598 * offset 980
2599 */
2601 /**
2602 * offset 981
2603 */
2605 /**
2606 * How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs.
2607 * units: sec
2608 * offset 982
2609 */
2610 scaled_channel<uint8_t, 20, 1> tpsAccelLookback;
2611 /**
2612 * need 4 byte alignment
2613 * units: units
2614 * offset 983
2615 */
2616 uint8_t alignmentFill_at_983[1] = {};
2617 /**
2618 * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
2619 * units: roc
2620 * offset 984
2621 */
2623 /**
2624 * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
2625 * units: coeff
2626 * offset 988
2627 */
2629 /**
2630 * Time to blend from predicted MAP back to real MAP. Used only in Predictive MAP mode.
2631 * units: s
2632 * offset 992
2633 */
2635 /**
2636 * Selects the acceleration enrichment strategy.
2637 * offset 996
2638 */
2640 /**
2641 * 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.
2642 * units: sec
2643 * offset 997
2644 */
2645 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterDfcoTime;
2646 /**
2647 * Pause closed loop fueling after acceleration fuel occurs. Set this to a little longer than however long is required for normal fueling behavior to resume after fuel accel.
2648 * units: sec
2649 * offset 998
2650 */
2651 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterAccelTime;
2652 /**
2653 * need 4 byte alignment
2654 * units: units
2655 * offset 999
2656 */
2657 uint8_t alignmentFill_at_999[1] = {};
2658 /**
2659 * Launch disabled above this speed if setting is above zero
2660 * units: Kph
2661 * offset 1000
2662 */
2664 /**
2665 * Starting Launch RPM window to activate (subtracts from Launch RPM)
2666 * units: RPM
2667 * offset 1004
2668 */
2669 int launchRpmWindow;
2670 /**
2671 * units: ms
2672 * offset 1008
2673 */
2675 /**
2676 * offset 1012
2677 */
2678 float mapExpAverageAlpha;
2679 /**
2680 * offset 1016
2681 */
2683 /**
2684 * offset 1020
2685 */
2686 float turbochargerFilter;
2687 /**
2688 * offset 1024
2689 */
2691 /**
2692 * offset 1028
2693 */
2694 float launchActivateDelay;
2695 /**
2696 * offset 1032
2697 */
2698 stft_s stft;
2699 /**
2700 * offset 1060
2701 */
2702 ltft_s ltft;
2703 /**
2704 * offset 1072
2705 */
2706 dc_io stepperDcIo[DC_PER_STEPPER] = {};
2707 /**
2708 * For example, BMW, GM or Chevrolet
2709 * REQUIRED for rusEFI Online
2710 * offset 1088
2711 */
2713 /**
2714 * For example, LS1 or NB2
2715 * REQUIRED for rusEFI Online
2716 * offset 1120
2717 */
2719 /**
2720 * For example, Hunchback or Orange Miata
2721 * Vehicle name has to be unique between your vehicles.
2722 * REQUIRED for rusEFI Online
2723 * offset 1152
2724 */
2726 /**
2727 * offset 1184
2728 */
2729 output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT] = {};
2730 /**
2731 * offset 1196
2732 */
2733 dc_function_e etbFunctions[ETB_COUNT] = {};
2734 /**
2735 * offset 1198
2736 */
2738 /**
2739 * need 4 byte alignment
2740 * units: units
2741 * offset 1199
2742 */
2743 uint8_t alignmentFill_at_1199[1] = {};
2744 /**
2745 * offset 1200
2746 */
2748 /**
2749 * offset 1202
2750 */
2752 /**
2753 * need 4 byte alignment
2754 * units: units
2755 * offset 1203
2756 */
2757 uint8_t alignmentFill_at_1203[1] = {};
2758 /**
2759 * offset 1204
2760 */
2762 /**
2763 * offset 1206
2764 */
2765 output_pin_e luaOutputPins[LUA_PWM_COUNT] = {};
2766 /**
2767 * need 4 byte alignment
2768 * units: units
2769 * offset 1222
2770 */
2771 uint8_t alignmentFill_at_1222[2] = {};
2772 /**
2773 * Angle between cam sensor and VVT zero position
2774 * units: value
2775 * offset 1224
2776 */
2777 float vvtOffsets[CAM_INPUTS_COUNT] = {};
2778 /**
2779 * offset 1240
2780 */
2781 vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT] = {};
2782 /**
2783 * offset 1272
2784 */
2785 gppwm_note_t gpPwmNote[GPPWM_CHANNELS] = {};
2786 /**
2787 * units: ADC
2788 * offset 1336
2789 */
2790 uint16_t tps2SecondaryMin;
2791 /**
2792 * units: ADC
2793 * offset 1338
2794 */
2795 uint16_t tps2SecondaryMax;
2796 /**
2797 * Select which bus the wideband controller is attached to.
2798 offset 1340 bit 0 */
2799 bool widebandOnSecondBus : 1 {};
2800 /**
2801 * Enables lambda sensor closed loop feedback for fuelling.
2802 offset 1340 bit 1 */
2804 /**
2805 * Write SD card log even when powered by USB
2806 offset 1340 bit 2 */
2807 bool alwaysWriteSdCard : 1 {};
2808 /**
2809 * Second harmonic (aka double) is usually quieter background noise
2810 offset 1340 bit 3 */
2812 /**
2813 offset 1340 bit 4 */
2814 bool yesUnderstandLocking : 1 {};
2815 /**
2816 * Sometimes we have a performance issue while printing error
2817 offset 1340 bit 5 */
2818 bool silentTriggerError : 1 {};
2819 /**
2820 offset 1340 bit 6 */
2821 bool useLinearCltSensor : 1 {};
2822 /**
2823 * enable can_read/disable can_read
2824 offset 1340 bit 7 */
2825 bool canReadEnabled : 1 {};
2826 /**
2827 * enable can_write/disable can_write. See also can1ListenMode
2828 offset 1340 bit 8 */
2829 bool canWriteEnabled : 1 {};
2830 /**
2831 offset 1340 bit 9 */
2832 bool useLinearIatSensor : 1 {};
2833 /**
2834 offset 1340 bit 10 */
2835 bool enableOilPressureProtect : 1 {};
2836 /**
2837 * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
2838 offset 1340 bit 11 */
2839 bool tachPulseDurationAsDutyCycle : 1 {};
2840 /**
2841 * This enables smart alternator control and activates the extra alternator settings.
2842 offset 1340 bit 12 */
2843 bool isAlternatorControlEnabled : 1 {};
2844 /**
2845 * https://wiki.rusefi.com/Trigger-Configuration-Guide
2846 * This setting flips the signal from the primary engine speed sensor.
2847 offset 1340 bit 13 */
2848 bool invertPrimaryTriggerSignal : 1 {};
2849 /**
2850 * https://wiki.rusefi.com/Trigger-Configuration-Guide
2851 * This setting flips the signal from the secondary engine speed sensor.
2852 offset 1340 bit 14 */
2853 bool invertSecondaryTriggerSignal : 1 {};
2854 /**
2855 offset 1340 bit 15 */
2856 bool cutFuelOnHardLimit : 1 {};
2857 /**
2858 * Be careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer.
2859 offset 1340 bit 16 */
2860 bool cutSparkOnHardLimit : 1 {};
2861 /**
2862 offset 1340 bit 17 */
2863 bool launchFuelCutEnable : 1 {};
2864 /**
2865 * This is the Cut Mode normally used
2866 offset 1340 bit 18 */
2867 bool launchSparkCutEnable : 1 {};
2868 /**
2869 offset 1340 bit 19 */
2870 bool torqueReductionEnabled : 1 {};
2871 /**
2872 offset 1340 bit 20 */
2874 /**
2875 offset 1340 bit 21 */
2876 bool limitTorqueReductionTime : 1 {};
2877 /**
2878 * Are you a developer troubleshooting TS over CAN ISO/TP?
2879 offset 1340 bit 22 */
2880 bool verboseIsoTp : 1 {};
2881 /**
2882 * In this mode only trigger events go into engine sniffer and not coils/injectors etc
2883 offset 1340 bit 23 */
2884 bool engineSnifferFocusOnInputs : 1 {};
2885 /**
2886 offset 1340 bit 24 */
2887 bool twoStroke : 1 {};
2888 /**
2889 * Where is your primary skipped wheel located?
2890 offset 1340 bit 25 */
2891 bool skippedWheelOnCam : 1 {};
2892 /**
2893 offset 1340 bit 26 */
2894 bool unusedBit_485_26 : 1 {};
2895 /**
2896 offset 1340 bit 27 */
2897 bool unusedBit_485_27 : 1 {};
2898 /**
2899 offset 1340 bit 28 */
2900 bool unusedBit_485_28 : 1 {};
2901 /**
2902 offset 1340 bit 29 */
2903 bool unusedBit_485_29 : 1 {};
2904 /**
2905 offset 1340 bit 30 */
2906 bool unusedBit_485_30 : 1 {};
2907 /**
2908 offset 1340 bit 31 */
2909 bool unusedBit_485_31 : 1 {};
2910 /**
2911 * A/C button input
2912 * offset 1344
2913 */
2915 /**
2916 * offset 1346
2917 */
2919 /**
2920 * Expected neutral position
2921 * units: %
2922 * offset 1347
2923 */
2924 uint8_t etbNeutralPosition;
2925 /**
2926 * See also idleRpmPid
2927 * offset 1348
2928 */
2930 /**
2931 * need 4 byte alignment
2932 * units: units
2933 * offset 1349
2934 */
2935 uint8_t alignmentFill_at_1349[3] = {};
2936 /**
2937 offset 1352 bit 0 */
2938 bool isInjectionEnabled : 1 {};
2939 /**
2940 offset 1352 bit 1 */
2941 bool isIgnitionEnabled : 1 {};
2942 /**
2943 * When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders.
2944 offset 1352 bit 2 */
2945 bool isCylinderCleanupEnabled : 1 {};
2946 /**
2947 * Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?
2948 offset 1352 bit 3 */
2949 bool complexWallModel : 1 {};
2950 /**
2951 * RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution
2952 offset 1352 bit 4 */
2953 bool alwaysInstantRpm : 1 {};
2954 /**
2955 offset 1352 bit 5 */
2956 bool isMapAveragingEnabled : 1 {};
2957 /**
2958 * 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 advance at low idle speeds will prevent stalling and extra retard at high idle speeds can help reduce engine power and slow the idle speed.
2959 offset 1352 bit 6 */
2960 bool useSeparateAdvanceForIdle : 1 {};
2961 /**
2962 offset 1352 bit 7 */
2963 bool isWaveAnalyzerEnabled : 1 {};
2964 /**
2965 * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
2966 offset 1352 bit 8 */
2967 bool useSeparateVeForIdle : 1 {};
2968 /**
2969 * Verbose info in console below engineSnifferRpmThreshold
2970 offset 1352 bit 9 */
2971 bool verboseTriggerSynchDetails : 1 {};
2972 /**
2973 offset 1352 bit 10 */
2974 bool hondaK : 1 {};
2975 /**
2976 * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
2977 offset 1352 bit 11 */
2978 bool twoWireBatchIgnition : 1 {};
2979 /**
2980 * Read MAP sensor on ECU start-up to use as baro value.
2981 offset 1352 bit 12 */
2982 bool useFixedBaroCorrFromMap : 1 {};
2983 /**
2984 * In Constant mode, timing is automatically tapered to running as RPM increases.
2985 * In Table mode, the "Cranking ignition advance" table is used directly.
2986 offset 1352 bit 13 */
2988 /**
2989 * This enables the various ignition corrections during cranking (IAT, CLT and PID idle).
2990 * You probably don't need this.
2991 offset 1352 bit 14 */
2993 /**
2994 * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
2995 offset 1352 bit 15 */
2996 bool flexCranking : 1 {};
2997 /**
2998 * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
2999 offset 1352 bit 16 */
3000 bool useIacPidMultTable : 1 {};
3001 /**
3002 offset 1352 bit 17 */
3003 bool isBoostControlEnabled : 1 {};
3004 /**
3005 * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
3006 offset 1352 bit 18 */
3007 bool launchSmoothRetard : 1 {};
3008 /**
3009 * Some engines are OK running semi-random sequential while other engine require phase synchronization
3010 offset 1352 bit 19 */
3012 /**
3013 * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
3014 offset 1352 bit 20 */
3015 bool useCltBasedRpmLimit : 1 {};
3016 /**
3017 * If enabled, don't wait for engine start to heat O2 sensors.
3018 * WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
3019 offset 1352 bit 21 */
3020 bool forceO2Heating : 1 {};
3021 /**
3022 * 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'.
3023 offset 1352 bit 22 */
3024 bool invertVvtControlIntake : 1 {};
3025 /**
3026 * 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'.
3027 offset 1352 bit 23 */
3028 bool invertVvtControlExhaust : 1 {};
3029 /**
3030 offset 1352 bit 24 */
3031 bool useBiQuadOnAuxSpeedSensors : 1 {};
3032 /**
3033 * '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.
3034 offset 1352 bit 25 */
3035 bool sdTriggerLog : 1 {};
3036 /**
3037 offset 1352 bit 26 */
3038 bool stepper_dc_use_two_wires : 1 {};
3039 /**
3040 offset 1352 bit 27 */
3041 bool watchOutForLinearTime : 1 {};
3042 /**
3043 offset 1352 bit 28 */
3044 bool unusedBit_524_28 : 1 {};
3045 /**
3046 offset 1352 bit 29 */
3047 bool unusedBit_524_29 : 1 {};
3048 /**
3049 offset 1352 bit 30 */
3050 bool unusedBit_524_30 : 1 {};
3051 /**
3052 offset 1352 bit 31 */
3053 bool unusedBit_524_31 : 1 {};
3054 /**
3055 * units: count
3056 * offset 1356
3057 */
3058 uint32_t engineChartSize;
3059 /**
3060 * units: mult
3061 * offset 1360
3062 */
3064 /**
3065 * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
3066 * units: RPM
3067 * offset 1364
3068 */
3069 int16_t acIdleRpmTarget;
3070 /**
3071 * set warningPeriod X
3072 * units: seconds
3073 * offset 1366
3074 */
3075 int16_t warningPeriod;
3076 /**
3077 * units: angle
3078 * offset 1368
3079 */
3081 /**
3082 * units: ms
3083 * offset 1372
3084 */
3086 /**
3087 * units: count
3088 * offset 1376
3089 */
3091 /**
3092 * Pedal position to realize that we need to reduce torque when the trigger pin is uuuh triggered
3093 * offset 1380
3094 */
3096 /**
3097 * Duration in ms or duty cycle depending on selected mode
3098 * offset 1384
3099 */
3101 /**
3102 * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
3103 * units: Seconds
3104 * offset 1388
3105 */
3106 float wwaeTau;
3107 /**
3108 * offset 1392
3109 */
3111 /**
3112 * offset 1412
3113 */
3114 pid_s etb;
3115 /**
3116 * RPM range above upper limit for extra air taper
3117 * units: RPM
3118 * offset 1432
3119 */
3120 int16_t airTaperRpmRange;
3121 /**
3122 * offset 1434
3123 */
3125 /**
3126 * Closed throttle#2. todo: extract these two fields into a structure
3127 * See also tps2_1AdcChannel
3128 * units: ADC
3129 * offset 1436
3130 */
3131 int16_t tps2Min;
3132 /**
3133 * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!
3134 * See also tps1_1AdcChannel
3135 * units: ADC
3136 * offset 1438
3137 */
3138 int16_t tps2Max;
3139 /**
3140 * See also startStopButtonPin
3141 * offset 1440
3142 */
3144 /**
3145 * offset 1442
3146 */
3148 /**
3149 * need 4 byte alignment
3150 * units: units
3151 * offset 1443
3152 */
3153 uint8_t alignmentFill_at_1443[1] = {};
3154 /**
3155 * offset 1444
3156 */
3158 /**
3159 * offset 1446
3160 */
3161 scaled_channel<uint16_t, 1000, 1> tachPulsePerRev;
3162 /**
3163 * kPa value which is too low to be true
3164 * units: kPa
3165 * offset 1448
3166 */
3168 /**
3169 * kPa value which is too high to be true
3170 * units: kPa
3171 * offset 1452
3172 */
3174 /**
3175 * How long to wait for the spark to fire before recharging the coil for another spark.
3176 * units: ms
3177 * offset 1456
3178 */
3179 scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
3180 /**
3181 * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
3182 * units: ms
3183 * offset 1458
3184 */
3185 scaled_channel<uint16_t, 1000, 1> multisparkDwell;
3186 /**
3187 * See cltIdleRpmBins
3188 * offset 1460
3189 */
3191 /**
3192 * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
3193 * units: Fraction
3194 * offset 1480
3195 */
3196 float wwaeBeta;
3197 /**
3198 * See also EFI_CONSOLE_RX_BRAIN_PIN
3199 * offset 1484
3200 */
3202 /**
3203 * offset 1486
3204 */
3206 /**
3207 * offset 1488
3208 */
3209 Gpio auxValves[AUX_DIGITAL_VALVE_COUNT] = {};
3210 /**
3211 * offset 1492
3212 */
3214 /**
3215 * offset 1494
3216 */
3218 /**
3219 * units: volts
3220 * offset 1496
3221 */
3223 /**
3224 * Pedal in the floor
3225 * units: volts
3226 * offset 1500
3227 */
3229 /**
3230 * on IGN voltage detection turn fuel pump on to build fuel pressure
3231 * units: seconds
3232 * offset 1504
3233 */
3235 /**
3236 * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
3237 * units: RPM
3238 * offset 1506
3239 */
3240 int16_t idlePidRpmDeadZone;
3241 /**
3242 * See Over/Undervoltage Shutdown/Retry bit in documentation
3243 offset 1508 bit 0 */
3244 bool mc33810DisableRecoveryMode : 1 {};
3245 /**
3246 offset 1508 bit 1 */
3247 bool mc33810Gpgd0Mode : 1 {};
3248 /**
3249 offset 1508 bit 2 */
3250 bool mc33810Gpgd1Mode : 1 {};
3251 /**
3252 offset 1508 bit 3 */
3253 bool mc33810Gpgd2Mode : 1 {};
3254 /**
3255 offset 1508 bit 4 */
3256 bool mc33810Gpgd3Mode : 1 {};
3257 /**
3258 * Send out board statistics
3259 offset 1508 bit 5 */
3260 bool enableExtendedCanBroadcast : 1 {};
3261 /**
3262 * global_can_data performance hack
3263 offset 1508 bit 6 */
3264 bool luaCanRxWorkaround : 1 {};
3265 /**
3266 offset 1508 bit 7 */
3267 bool flexSensorInverted : 1 {};
3268 /**
3269 offset 1508 bit 8 */
3270 bool useHardSkipInTraction : 1 {};
3271 /**
3272 * Use Aux Speed 1 as one of speeds for wheel slip ratio?
3273 offset 1508 bit 9 */
3274 bool useAuxSpeedForSlipRatio : 1 {};
3275 /**
3276 * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
3277 offset 1508 bit 10 */
3278 bool useVssAsSecondWheelSpeed : 1 {};
3279 /**
3280 offset 1508 bit 11 */
3281 bool is_enabled_spi_5 : 1 {};
3282 /**
3283 offset 1508 bit 12 */
3284 bool is_enabled_spi_6 : 1 {};
3285 /**
3286 * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
3287 offset 1508 bit 13 */
3288 bool enableAemXSeriesEgt : 1 {};
3289 /**
3290 offset 1508 bit 14 */
3291 bool startRequestPinInverted : 1 {};
3292 /**
3293 offset 1508 bit 15 */
3294 bool tcu_rangeSensorPulldown : 1 {};
3295 /**
3296 offset 1508 bit 16 */
3297 bool devBit01 : 1 {};
3298 /**
3299 offset 1508 bit 17 */
3300 bool devBit0 : 1 {};
3301 /**
3302 offset 1508 bit 18 */
3303 bool devBit1 : 1 {};
3304 /**
3305 offset 1508 bit 19 */
3306 bool devBit2 : 1 {};
3307 /**
3308 offset 1508 bit 20 */
3309 bool devBit3 : 1 {};
3310 /**
3311 offset 1508 bit 21 */
3312 bool devBit4 : 1 {};
3313 /**
3314 offset 1508 bit 22 */
3315 bool devBit5 : 1 {};
3316 /**
3317 offset 1508 bit 23 */
3318 bool devBit6 : 1 {};
3319 /**
3320 offset 1508 bit 24 */
3321 bool devBit7 : 1 {};
3322 /**
3323 offset 1508 bit 25 */
3324 bool invertExhaustCamVVTSignal : 1 {};
3325 /**
3326 * "Available via TS Plugin see https://rusefi.com/s/knock"
3327 offset 1508 bit 26 */
3328 bool enableKnockSpectrogram : 1 {};
3329 /**
3330 offset 1508 bit 27 */
3331 bool enableKnockSpectrogramFilter : 1 {};
3332 /**
3333 offset 1508 bit 28 */
3334 bool unusedBit_592_28 : 1 {};
3335 /**
3336 offset 1508 bit 29 */
3337 bool unusedBit_592_29 : 1 {};
3338 /**
3339 offset 1508 bit 30 */
3340 bool unusedBit_592_30 : 1 {};
3341 /**
3342 offset 1508 bit 31 */
3343 bool unusedBit_592_31 : 1 {};
3344 /**
3345 * This value is an added for base idle value. Idle Value added when coasting and transitioning into idle.
3346 * units: percent
3347 * offset 1512
3348 */
3349 int16_t iacByTpsTaper;
3350 /**
3351 * offset 1514
3352 */
3354 /**
3355 * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
3356 * units: kph
3357 * offset 1516
3358 */
3359 uint8_t coastingFuelCutVssLow;
3360 /**
3361 * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
3362 * units: kph
3363 * offset 1517
3364 */
3365 uint8_t coastingFuelCutVssHigh;
3366 /**
3367 * need 4 byte alignment
3368 * units: units
3369 * offset 1518
3370 */
3371 uint8_t alignmentFill_at_1518[2] = {};
3372 /**
3373 * 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.
3374 * units: roc
3375 * offset 1520
3376 */
3378 /**
3379 * offset 1524
3380 */
3381 brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT] = {};
3382 /**
3383 * offset 1528
3384 */
3385 uint8_t totalGearsCount;
3386 /**
3387 * Sets what part of injection's is controlled by the injection phase table.
3388 * offset 1529
3389 */
3391 /**
3392 * See http://rusefi.com/s/debugmode
3393 * offset 1530
3394 */
3396 /**
3397 * Additional idle % when fan #1 is active
3398 * units: %
3399 * offset 1531
3400 */
3401 uint8_t fan1ExtraIdle;
3402 /**
3403 * Band rate for primary TTL
3404 * units: BPs
3405 * offset 1532
3406 */
3407 uint32_t uartConsoleSerialSpeed;
3408 /**
3409 * units: volts
3410 * offset 1536
3411 */
3413 /**
3414 * Pedal in the floor
3415 * units: volts
3416 * offset 1540
3417 */
3419 /**
3420 * offset 1544
3421 */
3423 /**
3424 * Override the Y axis (load) value used for the VE table.
3425 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3426 * offset 1545
3427 */
3429 /**
3430 * offset 1546
3431 */
3433 /**
3434 * Override the Y axis (load) value used for the AFR table.
3435 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3436 * offset 1547
3437 */
3439 /**
3440 * units: A
3441 * offset 1548
3442 */
3443 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3444 /**
3445 * units: A
3446 * offset 1549
3447 */
3448 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
3449 /**
3450 * How long to deactivate power when hold current is reached before applying power again
3451 * units: us
3452 * offset 1550
3453 */
3454 uint8_t mc33_hpfp_i_hold_off;
3455 /**
3456 * Maximum amount of time the solenoid can be active before assuming a programming error
3457 * units: ms
3458 * offset 1551
3459 */
3460 uint8_t mc33_hpfp_max_hold;
3461 /**
3462 * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
3463 offset 1552 bit 0 */
3464 bool stepperDcInvertedPins : 1 {};
3465 /**
3466 * Allow OpenBLT on Primary CAN
3467 offset 1552 bit 1 */
3468 bool canOpenBLT : 1 {};
3469 /**
3470 * Allow OpenBLT on Secondary CAN
3471 offset 1552 bit 2 */
3472 bool can2OpenBLT : 1 {};
3473 /**
3474 * Select whether to configure injector flow in volumetric flow (default, cc/min) or mass flow (g/s).
3475 offset 1552 bit 3 */
3476 bool injectorFlowAsMassFlow : 1 {};
3477 /**
3478 offset 1552 bit 4 */
3479 bool boardUseCanTerminator : 1 {};
3480 /**
3481 offset 1552 bit 5 */
3482 bool kLineDoHondaSend : 1 {};
3483 /**
3484 * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
3485 offset 1552 bit 6 */
3486 bool can1ListenMode : 1 {};
3487 /**
3488 offset 1552 bit 7 */
3489 bool can2ListenMode : 1 {};
3490 /**
3491 offset 1552 bit 8 */
3492 bool unusedBit_626_8 : 1 {};
3493 /**
3494 offset 1552 bit 9 */
3495 bool unusedBit_626_9 : 1 {};
3496 /**
3497 offset 1552 bit 10 */
3498 bool unusedBit_626_10 : 1 {};
3499 /**
3500 offset 1552 bit 11 */
3501 bool unusedBit_626_11 : 1 {};
3502 /**
3503 offset 1552 bit 12 */
3504 bool unusedBit_626_12 : 1 {};
3505 /**
3506 offset 1552 bit 13 */
3507 bool unusedBit_626_13 : 1 {};
3508 /**
3509 offset 1552 bit 14 */
3510 bool unusedBit_626_14 : 1 {};
3511 /**
3512 offset 1552 bit 15 */
3513 bool unusedBit_626_15 : 1 {};
3514 /**
3515 offset 1552 bit 16 */
3516 bool unusedBit_626_16 : 1 {};
3517 /**
3518 offset 1552 bit 17 */
3519 bool unusedBit_626_17 : 1 {};
3520 /**
3521 offset 1552 bit 18 */
3522 bool unusedBit_626_18 : 1 {};
3523 /**
3524 offset 1552 bit 19 */
3525 bool unusedBit_626_19 : 1 {};
3526 /**
3527 offset 1552 bit 20 */
3528 bool unusedBit_626_20 : 1 {};
3529 /**
3530 offset 1552 bit 21 */
3531 bool unusedBit_626_21 : 1 {};
3532 /**
3533 offset 1552 bit 22 */
3534 bool unusedBit_626_22 : 1 {};
3535 /**
3536 offset 1552 bit 23 */
3537 bool unusedBit_626_23 : 1 {};
3538 /**
3539 offset 1552 bit 24 */
3540 bool unusedBit_626_24 : 1 {};
3541 /**
3542 offset 1552 bit 25 */
3543 bool unusedBit_626_25 : 1 {};
3544 /**
3545 offset 1552 bit 26 */
3546 bool unusedBit_626_26 : 1 {};
3547 /**
3548 offset 1552 bit 27 */
3549 bool unusedBit_626_27 : 1 {};
3550 /**
3551 offset 1552 bit 28 */
3552 bool unusedBit_626_28 : 1 {};
3553 /**
3554 offset 1552 bit 29 */
3555 bool unusedBit_626_29 : 1 {};
3556 /**
3557 offset 1552 bit 30 */
3558 bool unusedBit_626_30 : 1 {};
3559 /**
3560 offset 1552 bit 31 */
3561 bool unusedBit_626_31 : 1 {};
3562 /**
3563 * Angle of tooth detection within engine phase cycle
3564 * units: angle
3565 * offset 1556
3566 */
3567 uint8_t camDecoder2jzPosition;
3568 /**
3569 * offset 1557
3570 */
3572 /**
3573 * Duration of each test pulse
3574 * units: ms
3575 * offset 1558
3576 */
3577 scaled_channel<uint16_t, 100, 1> benchTestOnTime;
3578 /**
3579 * units: %
3580 * offset 1560
3581 */
3583 /**
3584 * units: %
3585 * offset 1561
3586 */
3587 scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
3588 /**
3589 * offset 1562
3590 */
3592 /**
3593 * need 4 byte alignment
3594 * units: units
3595 * offset 1563
3596 */
3597 uint8_t alignmentFill_at_1563[1] = {};
3598 /**
3599 * offset 1564
3600 */
3602 /**
3603 * offset 1566
3604 */
3606 /**
3607 * offset 1568
3608 */
3610 /**
3611 * offset 1569
3612 */
3614 /**
3615 * Override the Y axis (load) value used for the ignition table.
3616 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3617 * offset 1570
3618 */
3620 /**
3621 * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
3622 * offset 1571
3623 */
3625 /**
3626 * offset 1572
3627 */
3629 /**
3630 * offset 1574
3631 */
3633 /**
3634 * need 4 byte alignment
3635 * units: units
3636 * offset 1575
3637 */
3638 uint8_t alignmentFill_at_1575[1] = {};
3639 /**
3640 * MAP value above which fuel is cut in case of overboost.
3641 * Set to 0 to disable overboost cut.
3642 * units: kPa (absolute)
3643 * offset 1576
3644 */
3645 float boostCutPressure;
3646 /**
3647 * units: kg/h
3648 * offset 1580
3649 */
3650 scaled_channel<uint8_t, 1, 5> tchargeBins[16] = {};
3651 /**
3652 * units: ratio
3653 * offset 1596
3654 */
3655 scaled_channel<uint8_t, 100, 1> tchargeValues[16] = {};
3656 /**
3657 * Fixed timing, useful for TDC testing
3658 * units: deg
3659 * offset 1612
3660 */
3661 float fixedTiming;
3662 /**
3663 * MAP voltage for low point
3664 * units: v
3665 * offset 1616
3666 */
3667 float mapLowValueVoltage;
3668 /**
3669 * MAP voltage for low point
3670 * units: v
3671 * offset 1620
3672 */
3673 float mapHighValueVoltage;
3674 /**
3675 * EGO value correction
3676 * units: value
3677 * offset 1624
3678 */
3679 float egoValueShift;
3680 /**
3681 * VVT output solenoid pin for this cam
3682 * offset 1628
3683 */
3684 output_pin_e vvtPins[CAM_INPUTS_COUNT] = {};
3685 /**
3686 * offset 1636
3687 */
3688 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMinTps;
3689 /**
3690 * offset 1637
3691 */
3692 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMaxTps;
3693 /**
3694 * offset 1638
3695 */
3696 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMinTps;
3697 /**
3698 * offset 1639
3699 */
3700 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMaxTps;
3701 /**
3702 * offset 1640
3703 */
3705 /**
3706 * 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.
3707 * units: deg BTDC
3708 * offset 1642
3709 */
3710 int8_t minimumIgnitionTiming;
3711 /**
3712 * 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
3713 * units: deg BTDC
3714 * offset 1643
3715 */
3716 int8_t maximumIgnitionTiming;
3717 /**
3718 * units: Hz
3719 * offset 1644
3720 */
3722 /**
3723 * offset 1648
3724 */
3725 vvt_mode_e vvtMode[CAMS_PER_BANK] = {};
3726 /**
3727 * Additional idle % when fan #2 is active
3728 * units: %
3729 * offset 1650
3730 */
3731 uint8_t fan2ExtraIdle;
3732 /**
3733 * Delay to allow fuel pressure to build before firing the priming pulse.
3734 * units: sec
3735 * offset 1651
3736 */
3737 scaled_channel<uint8_t, 100, 1> primingDelay;
3738 /**
3739 * offset 1652
3740 */
3741 adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT] = {};
3742 /**
3743 * offset 1660
3744 */
3745 output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT] = {};
3746 /**
3747 * offset 1684
3748 */
3750 /**
3751 * offset 1685
3752 */
3754 /**
3755 * None = I have a MAP-referenced fuel pressure regulator
3756 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
3757 * Sensed rail pressure = I have a fuel pressure sensor
3758 * HPFP fuel mass compensation = manual mode for GDI engines
3759 * offset 1686
3760 */
3762 /**
3763 * need 4 byte alignment
3764 * units: units
3765 * offset 1687
3766 */
3767 uint8_t alignmentFill_at_1687[1] = {};
3768 /**
3769 * This is the pressure at which your injector flow is known.
3770 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
3771 * This is gauge pressure/in reference to atmospheric.
3772 * units: kPa
3773 * offset 1688
3774 */
3776 /**
3777 * offset 1692
3778 */
3780 /**
3781 * offset 1724
3782 */
3784 /**
3785 * units: Deg
3786 * offset 1756
3787 */
3788 int16_t knockSamplingDuration;
3789 /**
3790 * units: Hz
3791 * offset 1758
3792 */
3793 int16_t etbFreq;
3794 /**
3795 * offset 1760
3796 */
3798 /**
3799 * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
3800 * offset 1780
3801 */
3803 /**
3804 * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
3805 * units: %
3806 * offset 1781
3807 */
3808 uint8_t stepperMinDutyCycle;
3809 /**
3810 * Use to limit the max.current through the stepper motor (100% = no limit)
3811 * units: %
3812 * offset 1782
3813 */
3814 uint8_t stepperMaxDutyCycle;
3815 /**
3816 * offset 1783
3817 */
3819 /**
3820 * per-cylinder ignition and fueling timing correction for uneven engines
3821 * units: deg
3822 * offset 1784
3823 */
3824 angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT] = {};
3825 /**
3826 * units: seconds
3827 * offset 1832
3828 */
3830 /**
3831 * Minimum coolant temperature to activate VVT
3832 * units: deg C
3833 * offset 1836
3834 */
3836 /**
3837 * offset 1837
3838 */
3840 /**
3841 * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
3842 * offset 1838
3843 */
3845 /**
3846 * offset 1839
3847 */
3849 /**
3850 * offset 1840
3851 */
3853 /**
3854 * offset 1841
3855 */
3857 /**
3858 * offset 1842
3859 */
3861 /**
3862 * offset 1843
3863 */
3865 /**
3866 * offset 1844
3867 */
3869 /**
3870 * offset 1845
3871 */
3873 /**
3874 * offset 1846
3875 */
3877 /**
3878 * need 4 byte alignment
3879 * units: units
3880 * offset 1847
3881 */
3882 uint8_t alignmentFill_at_1847[1] = {};
3883 /**
3884 * ResetB
3885 * offset 1848
3886 */
3888 /**
3889 * offset 1850
3890 */
3892 /**
3893 * Brake pedal switch
3894 * offset 1852
3895 */
3897 /**
3898 * need 4 byte alignment
3899 * units: units
3900 * offset 1854
3901 */
3902 uint8_t alignmentFill_at_1854[2] = {};
3903 /**
3904 * VVT output PID
3905 * TODO: rename to vvtPid
3906 * offset 1856
3907 */
3908 pid_s auxPid[CAMS_PER_BANK] = {};
3909 /**
3910 * offset 1896
3911 */
3912 float injectorCorrectionPolynomial[8] = {};
3913 /**
3914 * units: C
3915 * offset 1928
3916 */
3917 scaled_channel<int8_t, 1, 5> primeBins[PRIME_CURVE_COUNT] = {};
3918 /**
3919 * offset 1936
3920 */
3922 /**
3923 * offset 1956
3924 */
3926 /**
3927 * need 4 byte alignment
3928 * units: units
3929 * offset 1957
3930 */
3931 uint8_t alignmentFill_at_1957[1] = {};
3932 /**
3933 * offset 1958
3934 */
3936 /**
3937 * offset 1960
3938 */
3940 /**
3941 * offset 1962
3942 */
3944 /**
3945 * need 4 byte alignment
3946 * units: units
3947 * offset 1963
3948 */
3949 uint8_t alignmentFill_at_1963[1] = {};
3950 /**
3951 * offset 1964
3952 */
3954 /**
3955 * need 4 byte alignment
3956 * units: units
3957 * offset 1966
3958 */
3959 uint8_t alignmentFill_at_1966[2] = {};
3960 /**
3961 * units: hz
3962 * offset 1968
3963 */
3964 float auxFrequencyFilter;
3965 /**
3966 * offset 1972
3967 */
3968 sent_input_pin_e sentInputPins[SENT_INPUT_COUNT] = {};
3969 /**
3970 * This sets the RPM above which fuel cut is active.
3971 * units: rpm
3972 * offset 1974
3973 */
3974 int16_t coastingFuelCutRpmHigh;
3975 /**
3976 * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
3977 * units: rpm
3978 * offset 1976
3979 */
3980 int16_t coastingFuelCutRpmLow;
3981 /**
3982 * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
3983 * units: %
3984 * offset 1978
3985 */
3986 int16_t coastingFuelCutTps;
3987 /**
3988 * Fuel cutoff is disabled when the engine is cold.
3989 * units: C
3990 * offset 1980
3991 */
3992 int16_t coastingFuelCutClt;
3993 /**
3994 * Increases PID reaction for RPM<target by adding extra percent to PID-error
3995 * units: %
3996 * offset 1982
3997 */
3998 int16_t pidExtraForLowRpm;
3999 /**
4000 * MAP value above which fuel injection is re-enabled.
4001 * units: kPa
4002 * offset 1984
4003 */
4004 int16_t coastingFuelCutMap;
4005 /**
4006 * need 4 byte alignment
4007 * units: units
4008 * offset 1986
4009 */
4010 uint8_t alignmentFill_at_1986[2] = {};
4011 /**
4012 * offset 1988
4013 */
4015 /**
4016 * offset 2008
4017 */
4019 /**
4020 * offset 2028
4021 */
4022 gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT] = {};
4023 /**
4024 * offset 2124
4025 */
4026 gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT] = {};
4027 /**
4028 * offset 2188
4029 */
4030 gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT] = {};
4031 /**
4032 * Heat transfer coefficient at zero flow.
4033 * 0 means the air charge is fully heated to the same temperature as CLT.
4034 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
4035 * offset 2316
4036 */
4037 float tChargeAirCoefMin;
4038 /**
4039 * Heat transfer coefficient at high flow, as defined by "max air flow".
4040 * 0 means the air charge is fully heated to the same temperature as CLT.
4041 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
4042 * offset 2320
4043 */
4044 float tChargeAirCoefMax;
4045 /**
4046 * High flow point for heat transfer estimation.
4047 * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
4048 * units: kg/h
4049 * offset 2324
4050 */
4051 float tChargeAirFlowMax;
4052 /**
4053 * Maximum allowed rate of increase allowed for the estimated charge temperature
4054 * units: deg/sec
4055 * offset 2328
4056 */
4057 float tChargeAirIncrLimit;
4058 /**
4059 * Maximum allowed rate of decrease allowed for the estimated charge temperature
4060 * units: deg/sec
4061 * offset 2332
4062 */
4063 float tChargeAirDecrLimit;
4064 /**
4065 * iTerm min value
4066 * offset 2336
4067 */
4068 int16_t etb_iTermMin;
4069 /**
4070 * iTerm max value
4071 * offset 2338
4072 */
4073 int16_t etb_iTermMax;
4074 /**
4075 * See useIdleTimingPidControl
4076 * offset 2340
4077 */
4079 /**
4080 * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
4081 * offset 2360
4082 */
4084 /**
4085 * offset 2364
4086 */
4088 /**
4089 * offset 2365
4090 */
4092 /**
4093 * A delay in cycles between fuel-enrich. portions
4094 * units: cycles
4095 * offset 2366
4096 */
4097 int16_t tpsAccelFractionPeriod;
4098 /**
4099 * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
4100 * units: coef
4101 * offset 2368
4102 */
4104 /**
4105 * offset 2372
4106 */
4108 /**
4109 * offset 2373
4110 */
4112 /**
4113 * iTerm min value
4114 * offset 2374
4115 */
4116 int16_t idlerpmpid_iTermMin;
4117 /**
4118 * offset 2376
4119 */
4121 /**
4122 * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
4123 * E0 = 14.7
4124 * E10 = 14.1
4125 * E85 = 9.9
4126 * E100 = 9.0
4127 * units: :1
4128 * offset 2377
4129 */
4130 scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
4131 /**
4132 * iTerm max value
4133 * offset 2378
4134 */
4135 int16_t idlerpmpid_iTermMax;
4136 /**
4137 * This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.
4138 * units: %
4139 * offset 2380
4140 */
4142 /**
4143 * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
4144 * offset 2384
4145 */
4146 uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT] = {};
4147 /**
4148 * units: mg
4149 * offset 2396
4150 */
4151 scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT] = {};
4152 /**
4153 * Trigger comparator center point voltage
4154 * units: V
4155 * offset 2404
4156 */
4157 scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
4158 /**
4159 * Trigger comparator hysteresis voltage (Min)
4160 * units: V
4161 * offset 2405
4162 */
4163 scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
4164 /**
4165 * Trigger comparator hysteresis voltage (Max)
4166 * units: V
4167 * offset 2406
4168 */
4169 scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
4170 /**
4171 * VR-sensor saturation RPM
4172 * units: RPM
4173 * offset 2407
4174 */
4175 scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
4176 /**
4177 * units: ratio
4178 * offset 2408
4179 */
4180 scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
4181 /**
4182 * units: RPM
4183 * offset 2420
4184 */
4185 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4186 /**
4187 * offset 2426
4188 */
4190 /**
4191 * need 4 byte alignment
4192 * units: units
4193 * offset 2427
4194 */
4195 uint8_t alignmentFill_at_2427[1] = {};
4196 /**
4197 * offset 2428
4198 */
4199 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
4200 /**
4201 * Boost Current
4202 * units: mA
4203 * offset 2860
4204 */
4205 uint16_t mc33_i_boost;
4206 /**
4207 * Peak Current
4208 * units: mA
4209 * offset 2862
4210 */
4211 uint16_t mc33_i_peak;
4212 /**
4213 * Hold Current
4214 * units: mA
4215 * offset 2864
4216 */
4217 uint16_t mc33_i_hold;
4218 /**
4219 * 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.
4220 * units: us
4221 * offset 2866
4222 */
4223 uint16_t mc33_t_max_boost;
4224 /**
4225 * units: us
4226 * offset 2868
4227 */
4228 uint16_t mc33_t_peak_off;
4229 /**
4230 * Peak phase duration
4231 * units: us
4232 * offset 2870
4233 */
4234 uint16_t mc33_t_peak_tot;
4235 /**
4236 * units: us
4237 * offset 2872
4238 */
4239 uint16_t mc33_t_bypass;
4240 /**
4241 * units: us
4242 * offset 2874
4243 */
4244 uint16_t mc33_t_hold_off;
4245 /**
4246 * Hold phase duration
4247 * units: us
4248 * offset 2876
4249 */
4250 uint16_t mc33_t_hold_tot;
4251 /**
4252 * offset 2878
4253 */
4255 /**
4256 * offset 2879
4257 */
4259 /**
4260 * offset 2880
4261 */
4263 /**
4264 * offset 2881
4265 */
4266 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
4267 /**
4268 * need 4 byte alignment
4269 * units: units
4270 * offset 2887
4271 */
4272 uint8_t alignmentFill_at_2887[1] = {};
4273 /**
4274 * units: ratio
4275 * offset 2888
4276 */
4277 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
4278 /**
4279 * units: ratio
4280 * offset 2960
4281 */
4282 float triggerGapOverrideTo[GAP_TRACKING_LENGTH] = {};
4283 /**
4284 * 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.
4285 * units: rpm
4286 * offset 3032
4287 */
4288 scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
4289 /**
4290 * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
4291 * units: sec
4292 * offset 3033
4293 */
4294 scaled_channel<uint8_t, 10, 1> dfcoDelay;
4295 /**
4296 * 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.
4297 * units: sec
4298 * offset 3034
4299 */
4300 scaled_channel<uint8_t, 10, 1> acDelay;
4301 /**
4302 * offset 3035
4303 */
4305 /**
4306 * units: mg
4307 * offset 3036
4308 */
4309 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
4310 /**
4311 * Threshold in ETB error (target vs. actual) above which the jam timer is started. If the timer reaches the time specified in the jam detection timeout period, the throttle is considered jammed, and engine operation limited.
4312 * units: %
4313 * offset 3038
4314 */
4315 uint8_t etbJamDetectThreshold;
4316 /**
4317 * units: lobes/cam
4318 * offset 3039
4319 */
4320 uint8_t hpfpCamLobes;
4321 /**
4322 * offset 3040
4323 */
4325 /**
4326 * Low engine speed for A/C. Larger engines can survive lower values
4327 * units: RPM
4328 * offset 3041
4329 */
4330 scaled_channel<int8_t, 1, 10> acLowRpmLimit;
4331 /**
4332 * If the requested activation time is below this angle, don't bother running the pump
4333 * units: deg
4334 * offset 3042
4335 */
4336 uint8_t hpfpMinAngle;
4337 /**
4338 * need 4 byte alignment
4339 * units: units
4340 * offset 3043
4341 */
4342 uint8_t alignmentFill_at_3043[1] = {};
4343 /**
4344 * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
4345 * units: cc
4346 * offset 3044
4347 */
4348 scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
4349 /**
4350 * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
4351 * https://rusefi.com/forum/viewtopic.php?t=2192
4352 * units: deg
4353 * offset 3046
4354 */
4355 uint8_t hpfpActivationAngle;
4356 /**
4357 * offset 3047
4358 */
4359 uint8_t issFilterReciprocal;
4360 /**
4361 * units: %/kPa
4362 * offset 3048
4363 */
4364 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
4365 /**
4366 * units: %/kPa/lobe
4367 * offset 3050
4368 */
4369 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
4370 /**
4371 * iTerm min value
4372 * offset 3052
4373 */
4374 int16_t hpfpPid_iTermMin;
4375 /**
4376 * iTerm max value
4377 * offset 3054
4378 */
4379 int16_t hpfpPid_iTermMax;
4380 /**
4381 * 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.
4382 * units: kPa/s
4383 * offset 3056
4384 */
4385 uint16_t hpfpTargetDecay;
4386 /**
4387 * offset 3058
4388 */
4390 /**
4391 * units: ratio
4392 * offset 3066
4393 */
4394 scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT] = {};
4395 /**
4396 * We need to give engine time to build oil pressure without diverting it to VVT
4397 * units: ms
4398 * offset 3086
4399 */
4400 uint16_t vvtActivationDelayMs;
4401 /**
4402 * offset 3088
4403 */
4405 /**
4406 * offset 3089
4407 */
4409 /**
4410 * During revolution where ACR should be disabled at what specific angle to disengage
4411 * units: deg
4412 * offset 3090
4413 */
4414 uint16_t acrDisablePhase;
4415 /**
4416 * offset 3092
4417 */
4419 /**
4420 * offset 3112
4421 */
4423 /**
4424 * offset 3132
4425 */
4427 /**
4428 * offset 3134
4429 */
4431 /**
4432 * need 4 byte alignment
4433 * units: units
4434 * offset 3135
4435 */
4436 uint8_t alignmentFill_at_3135[1] = {};
4437 /**
4438 * offset 3136
4439 */
4441 /**
4442 * offset 3138
4443 */
4445 /**
4446 * need 4 byte alignment
4447 * units: units
4448 * offset 3139
4449 */
4450 uint8_t alignmentFill_at_3139[1] = {};
4451 /**
4452 * offset 3140
4453 */
4455 /**
4456 * offset 3142
4457 */
4459 /**
4460 * offset 3144
4461 */
4463 /**
4464 * need 4 byte alignment
4465 * units: units
4466 * offset 3145
4467 */
4468 uint8_t alignmentFill_at_3145[1] = {};
4469 /**
4470 * offset 3146
4471 */
4473 /**
4474 * offset 3148
4475 */
4477 /**
4478 * offset 3150
4479 */
4481 /**
4482 * need 4 byte alignment
4483 * units: units
4484 * offset 3151
4485 */
4486 uint8_t alignmentFill_at_3151[1] = {};
4487 /**
4488 * offset 3152
4489 */
4491 /**
4492 * offset 3154
4493 */
4495 /**
4496 * Set a minimum allowed target position to avoid slamming/driving against the hard mechanical stop in the throttle.
4497 * units: %
4498 * offset 3156
4499 */
4500 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
4501 /**
4502 * need 4 byte alignment
4503 * units: units
4504 * offset 3157
4505 */
4506 uint8_t alignmentFill_at_3157[1] = {};
4507 /**
4508 * offset 3158
4509 */
4510 uint16_t tuneHidingKey;
4511 /**
4512 * Individual characters are accessible using vin(index) Lua function
4513 * offset 3160
4514 */
4516 /**
4517 * units: C
4518 * offset 3177
4519 */
4521 /**
4522 * offset 3178
4523 */
4525 /**
4526 * need 4 byte alignment
4527 * units: units
4528 * offset 3179
4529 */
4530 uint8_t alignmentFill_at_3179[1] = {};
4531 /**
4532 * offset 3180
4533 */
4534 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
4535 /**
4536 * units: rpm
4537 * offset 3196
4538 */
4539 int16_t ALSMinRPM;
4540 /**
4541 * units: rpm
4542 * offset 3198
4543 */
4544 int16_t ALSMaxRPM;
4545 /**
4546 * units: sec
4547 * offset 3200
4548 */
4549 int16_t ALSMaxDuration;
4550 /**
4551 * units: C
4552 * offset 3202
4553 */
4554 int8_t ALSMinCLT;
4555 /**
4556 * units: C
4557 * offset 3203
4558 */
4559 int8_t ALSMaxCLT;
4560 /**
4561 * offset 3204
4562 */
4563 uint8_t alsMinTimeBetween;
4564 /**
4565 * offset 3205
4566 */
4567 uint8_t alsEtbPosition;
4568 /**
4569 * units: %
4570 * offset 3206
4571 */
4573 /**
4574 * If you have SENT TPS sensor please select type. For analog TPS leave None
4575 * offset 3207
4576 */
4578 /**
4579 * offset 3208
4580 */
4581 uint16_t customSentTpsMin;
4582 /**
4583 * need 4 byte alignment
4584 * units: units
4585 * offset 3210
4586 */
4587 uint8_t alignmentFill_at_3210[2] = {};
4588 /**
4589 * units: %
4590 * offset 3212
4591 */
4592 int ALSIdleAdd;
4593 /**
4594 * units: %
4595 * offset 3216
4596 */
4597 int ALSEtbAdd;
4598 /**
4599 * offset 3220
4600 */
4601 float ALSSkipRatio;
4602 /**
4603 * Hysterisis: if Pressure High Disable is 240kpa, and acPressureEnableHyst is 20, when the ECU sees 240kpa, A/C will be disabled, and stay disabled until 240-20=220kpa is reached
4604 * units: kPa (absolute)
4605 * offset 3224
4606 */
4607 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
4608 /**
4609 * offset 3225
4610 */
4612 /**
4613 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4614 * units: %
4615 * offset 3226
4616 */
4617 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4618 /**
4619 * For Toyota ETCS-i, use ~69%
4620 * units: %
4621 * offset 3227
4622 */
4623 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4624 /**
4625 * offset 3228
4626 */
4627 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
4628 /**
4629 * offset 3236
4630 */
4631 uint16_t customSentTpsMax;
4632 /**
4633 * offset 3238
4634 */
4635 uint16_t kLineBaudRate;
4636 /**
4637 * offset 3240
4638 */
4640 /**
4641 * offset 3241
4642 */
4643 UiMode uiMode;
4644 /**
4645 * Crank angle ATDC of first lobe peak
4646 * units: deg
4647 * offset 3242
4648 */
4649 int16_t hpfpPeakPos;
4650 /**
4651 * units: us
4652 * offset 3244
4653 */
4654 int16_t kLinePeriodUs;
4655 /**
4656 * 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)
4657 * units: RPM
4658 * offset 3246
4659 */
4660 scaled_channel<uint8_t, 1, 10> rpmSoftLimitWindowSize;
4661 /**
4662 * Degrees of timing REMOVED from actual timing during soft RPM limit window
4663 * units: deg
4664 * offset 3247
4665 */
4666 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4667 /**
4668 * % of fuel ADDED during window
4669 * units: %
4670 * offset 3248
4671 */
4672 scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
4673 /**
4674 * 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
4675 * units: RPM
4676 * offset 3249
4677 */
4678 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4679 /**
4680 * Time between bench test pulses
4681 * units: ms
4682 * offset 3250
4683 */
4684 scaled_channel<uint16_t, 10, 1> benchTestOffTime;
4685 /**
4686 * 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
4687 * units: kPa (absolute)
4688 * offset 3252
4689 */
4690 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4691 /**
4692 * Boost duty cycle modified by gear
4693 * units: %
4694 * offset 3253
4695 */
4696 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
4697 /**
4698 * need 4 byte alignment
4699 * units: units
4700 * offset 3263
4701 */
4702 uint8_t alignmentFill_at_3263[1] = {};
4703 /**
4704 * How many test bench pulses do you want
4705 * offset 3264
4706 */
4707 uint32_t benchTestCount;
4708 /**
4709 * How long initial idle adder is held before starting to decay.
4710 * units: seconds
4711 * offset 3268
4712 */
4713 scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
4714 /**
4715 * How long it takes to remove initial IAC adder to return to normal idle.
4716 * units: seconds
4717 * offset 3269
4718 */
4719 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4720 /**
4721 * offset 3270
4722 */
4723 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
4724 /**
4725 * offset 3282
4726 */
4727 pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT] = {};
4728 /**
4729 * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
4730 * units: ratio
4731 * offset 3288
4732 */
4733 scaled_channel<uint16_t, 10000, 1> canVssScaling;
4734 /**
4735 * need 4 byte alignment
4736 * units: units
4737 * offset 3290
4738 */
4739 uint8_t alignmentFill_at_3290[2] = {};
4740 /**
4741 * offset 3292
4742 */
4744 /**
4745 * offset 3324
4746 */
4748 /**
4749 * offset 3356
4750 */
4752 /**
4753 * offset 3388
4754 */
4756 /**
4757 * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
4758 * offset 3420
4759 */
4761 /**
4762 * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
4763 * offset 3421
4764 */
4766 /**
4767 * offset 3422
4768 */
4769 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
4770 /**
4771 * offset 3426
4772 */
4774 /**
4775 * Number of speedometer pulses per kilometer travelled.
4776 * offset 3428
4777 */
4778 uint16_t speedometerPulsePerKm;
4779 /**
4780 * offset 3430
4781 */
4782 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
4783 /**
4784 * offset 3434
4785 */
4787 /**
4788 * need 4 byte alignment
4789 * units: units
4790 * offset 3435
4791 */
4792 uint8_t alignmentFill_at_3435[1] = {};
4793 /**
4794 * offset 3436
4795 */
4796 float ignKeyAdcDivider;
4797 /**
4798 * offset 3440
4799 */
4801 /**
4802 * need 4 byte alignment
4803 * units: units
4804 * offset 3441
4805 */
4806 uint8_t alignmentFill_at_3441[3] = {};
4807 /**
4808 * units: ratio
4809 * offset 3444
4810 */
4811 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
4812 /**
4813 * units: ratio
4814 * offset 3460
4815 */
4816 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
4817 /**
4818 * units: %
4819 * offset 3476
4820 */
4821 int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4822 /**
4823 * If injector duty cycle hits this value, instantly cut fuel.
4824 * units: %
4825 * offset 3512
4826 */
4827 uint8_t maxInjectorDutyInstant;
4828 /**
4829 * If injector duty cycle hits this value for the specified delay time, cut fuel.
4830 * units: %
4831 * offset 3513
4832 */
4834 /**
4835 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
4836 * units: sec
4837 * offset 3514
4838 */
4839 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
4840 /**
4841 * need 4 byte alignment
4842 * units: units
4843 * offset 3515
4844 */
4845 uint8_t alignmentFill_at_3515[1] = {};
4846 /**
4847 * offset 3516
4848 */
4849 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
4850 /**
4851 * units: Deg
4852 * offset 3540
4853 */
4854 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4855 /**
4856 * units: %
4857 * offset 3576
4858 */
4859 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4860 /**
4861 * offset 3612
4862 */
4863 float auxSpeed1Multiplier;
4864 /**
4865 * offset 3616
4866 */
4868 /**
4869 * offset 3620
4870 */
4872 /**
4873 * offset 3622
4874 */
4876 /**
4877 * offset 3624
4878 */
4880 /**
4881 * offset 3626
4882 */
4884 /**
4885 * offset 3628
4886 */
4888 /**
4889 * offset 3630
4890 */
4892 /**
4893 * offset 3632
4894 */
4896 /**
4897 * offset 3634
4898 */
4900 /**
4901 * offset 3636
4902 */
4904 /**
4905 * offset 3638
4906 */
4908 /**
4909 * offset 3639
4910 */
4912 /**
4913 * offset 3640
4914 */
4916 /**
4917 * offset 3641
4918 */
4920 /**
4921 * offset 3642
4922 */
4924 /**
4925 * offset 3643
4926 */
4928 /**
4929 * offset 3644
4930 */
4932 /**
4933 * offset 3645
4934 */
4936 /**
4937 * need 4 byte alignment
4938 * units: units
4939 * offset 3646
4940 */
4941 uint8_t alignmentFill_at_3646[2] = {};
4942 /**
4943 * Secondary TTL channel baud rate
4944 * units: BPs
4945 * offset 3648
4946 */
4947 uint32_t tunerStudioSerialSpeed;
4948 /**
4949 * offset 3652
4950 */
4952 /**
4953 * offset 3654
4954 */
4956 /**
4957 * need 4 byte alignment
4958 * units: units
4959 * offset 3655
4960 */
4961 uint8_t alignmentFill_at_3655[1] = {};
4962 /**
4963 * offset 3656
4964 */
4965 int anotherCiTest;
4966 /**
4967 * offset 3660
4968 */
4969 uint32_t device_uid[3] = {};
4970 /**
4971 * offset 3672
4972 */
4973 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
4974 /**
4975 * need 4 byte alignment
4976 * units: units
4977 * offset 3678
4978 */
4979 uint8_t alignmentFill_at_3678[2] = {};
4980 /**
4981 * units: Ohm
4982 * offset 3680
4983 */
4985 /**
4986 * offset 3684
4987 */
4989 /**
4990 * Nominal coil charge current, 0.25A step
4991 * units: A
4992 * offset 3688
4993 */
4994 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
4995 /**
4996 * Maximum coil charge current, 1A step
4997 * units: A
4998 * offset 3689
4999 */
5000 uint8_t mc33810Maxi;
5001 /**
5002 * need 4 byte alignment
5003 * units: units
5004 * offset 3690
5005 */
5006 uint8_t alignmentFill_at_3690[2] = {};
5007 /**
5008 * offset 3692
5009 */
5011 /**
5012 * value of A/C pressure in kPa before that compressor is disengaged
5013 * units: kPa
5014 * offset 3712
5015 */
5016 uint16_t minAcPressure;
5017 /**
5018 * value of A/C pressure in kPa after that compressor is disengaged
5019 * units: kPa
5020 * offset 3714
5021 */
5022 uint16_t maxAcPressure;
5023 /**
5024 * Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise.
5025 * units: sec
5026 * offset 3716
5027 */
5028 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
5029 /**
5030 * need 4 byte alignment
5031 * units: units
5032 * offset 3717
5033 */
5034 uint8_t alignmentFill_at_3717[3] = {};
5035 /**
5036 * offset 3720
5037 */
5039 /**
5040 * offset 3740
5041 */
5043 /**
5044 * Below TPS value all knock suppression will be disabled.
5045 * units: %
5046 * offset 3760
5047 */
5048 scaled_channel<uint8_t, 1, 1> knockSuppressMinTps;
5049 /**
5050 * Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
5051 * units: %
5052 * offset 3761
5053 */
5054 scaled_channel<uint8_t, 10, 1> knockFuelTrimAggression;
5055 /**
5056 * After a knock event, reapply fuel at this rate.
5057 * units: 1%/s
5058 * offset 3762
5059 */
5060 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
5061 /**
5062 * Fuel trim when knock, max 30%
5063 * units: %
5064 * offset 3763
5065 */
5066 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
5067 /**
5068 * units: sense
5069 * offset 3764
5070 */
5072 /**
5073 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
5074 * units: Hz
5075 * offset 3768
5076 */
5077 float knockFrequency;
5078 /**
5079 * None = I have a MAP-referenced fuel pressure regulator
5080 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
5081 * Sensed rail pressure = I have a fuel pressure sensor
5082 * offset 3772
5083 */
5085 /**
5086 * need 4 byte alignment
5087 * units: units
5088 * offset 3773
5089 */
5090 uint8_t alignmentFill_at_3773[3] = {};
5091 /**
5092 * This is the pressure at which your injector flow is known.
5093 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
5094 * units: kPa
5095 * offset 3776
5096 */
5098 /**
5099 * SENT input connected to ETB
5100 * offset 3780
5101 */
5103 /**
5104 * SENT input used for high pressure fuel sensor
5105 * offset 3781
5106 */
5108 /**
5109 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
5110 * offset 3782
5111 */
5113 /**
5114 * need 4 byte alignment
5115 * units: units
5116 * offset 3783
5117 */
5118 uint8_t alignmentFill_at_3783[1] = {};
5119 /**
5120 offset 3784 bit 0 */
5121 bool nitrousControlEnabled : 1 {};
5122 /**
5123 offset 3784 bit 1 */
5124 bool unusedFancy2 : 1 {};
5125 /**
5126 offset 3784 bit 2 */
5127 bool unusedFancy3 : 1 {};
5128 /**
5129 offset 3784 bit 3 */
5130 bool unusedFancy4 : 1 {};
5131 /**
5132 offset 3784 bit 4 */
5133 bool unusedFancy5 : 1 {};
5134 /**
5135 offset 3784 bit 5 */
5136 bool unusedFancy6 : 1 {};
5137 /**
5138 offset 3784 bit 6 */
5139 bool unusedFancy7 : 1 {};
5140 /**
5141 offset 3784 bit 7 */
5142 bool unusedFancy8 : 1 {};
5143 /**
5144 offset 3784 bit 8 */
5145 bool unusedFancy9 : 1 {};
5146 /**
5147 offset 3784 bit 9 */
5148 bool unusedFancy10 : 1 {};
5149 /**
5150 offset 3784 bit 10 */
5151 bool unusedFancy11 : 1 {};
5152 /**
5153 offset 3784 bit 11 */
5154 bool unusedFancy12 : 1 {};
5155 /**
5156 offset 3784 bit 12 */
5157 bool unusedFancy13 : 1 {};
5158 /**
5159 offset 3784 bit 13 */
5160 bool unusedFancy14 : 1 {};
5161 /**
5162 offset 3784 bit 14 */
5163 bool unusedFancy15 : 1 {};
5164 /**
5165 offset 3784 bit 15 */
5166 bool unusedFancy16 : 1 {};
5167 /**
5168 offset 3784 bit 16 */
5169 bool unusedFancy17 : 1 {};
5170 /**
5171 offset 3784 bit 17 */
5172 bool unusedFancy18 : 1 {};
5173 /**
5174 offset 3784 bit 18 */
5175 bool unusedFancy19 : 1 {};
5176 /**
5177 offset 3784 bit 19 */
5178 bool unusedFancy20 : 1 {};
5179 /**
5180 offset 3784 bit 20 */
5181 bool unusedFancy21 : 1 {};
5182 /**
5183 offset 3784 bit 21 */
5184 bool unusedFancy22 : 1 {};
5185 /**
5186 offset 3784 bit 22 */
5187 bool unusedFancy23 : 1 {};
5188 /**
5189 offset 3784 bit 23 */
5190 bool unusedFancy24 : 1 {};
5191 /**
5192 offset 3784 bit 24 */
5193 bool unusedFancy25 : 1 {};
5194 /**
5195 offset 3784 bit 25 */
5196 bool unusedFancy26 : 1 {};
5197 /**
5198 offset 3784 bit 26 */
5199 bool unusedFancy27 : 1 {};
5200 /**
5201 offset 3784 bit 27 */
5202 bool unusedFancy28 : 1 {};
5203 /**
5204 offset 3784 bit 28 */
5205 bool unusedFancy29 : 1 {};
5206 /**
5207 offset 3784 bit 29 */
5208 bool unusedFancy30 : 1 {};
5209 /**
5210 offset 3784 bit 30 */
5211 bool unusedFancy31 : 1 {};
5212 /**
5213 offset 3784 bit 31 */
5214 bool unusedFancy32 : 1 {};
5215 /**
5216 * offset 3788
5217 */
5219 /**
5220 * need 4 byte alignment
5221 * units: units
5222 * offset 3789
5223 */
5224 uint8_t alignmentFill_at_3789[1] = {};
5225 /**
5226 * Pin that activates nitrous control
5227 * offset 3790
5228 */
5230 /**
5231 * offset 3792
5232 */
5234 /**
5235 * offset 3793
5236 */
5238 /**
5239 * offset 3794
5240 */
5242 /**
5243 * need 4 byte alignment
5244 * units: units
5245 * offset 3795
5246 */
5247 uint8_t alignmentFill_at_3795[1] = {};
5248 /**
5249 * offset 3796
5250 */
5252 /**
5253 * offset 3800
5254 */
5256 /**
5257 * units: deg C
5258 * offset 3804
5259 */
5261 /**
5262 * need 4 byte alignment
5263 * units: units
5264 * offset 3805
5265 */
5266 uint8_t alignmentFill_at_3805[1] = {};
5267 /**
5268 * units: kPa
5269 * offset 3806
5270 */
5271 int16_t nitrousMaximumMap;
5272 /**
5273 * units: afr
5274 * offset 3808
5275 */
5276 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
5277 /**
5278 * need 4 byte alignment
5279 * units: units
5280 * offset 3809
5281 */
5282 uint8_t alignmentFill_at_3809[1] = {};
5283 /**
5284 * units: rpm
5285 * offset 3810
5286 */
5287 uint16_t nitrousActivationRpm;
5288 /**
5289 * units: rpm
5290 * offset 3812
5291 */
5292 uint16_t nitrousDeactivationRpm;
5293 /**
5294 * units: rpm
5295 * offset 3814
5296 */
5298 /**
5299 * Retard timing by this amount during DFCO. Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
5300 * units: deg
5301 * offset 3816
5302 */
5303 uint8_t dfcoRetardDeg;
5304 /**
5305 * Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
5306 * units: s
5307 * offset 3817
5308 */
5309 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
5310 /**
5311 * offset 3818
5312 */
5314 /**
5315 * offset 3820
5316 */
5318 /**
5319 * units: %
5320 * offset 3821
5321 */
5323 /**
5324 * need 4 byte alignment
5325 * units: units
5326 * offset 3822
5327 */
5328 uint8_t alignmentFill_at_3822[2] = {};
5329 /**
5330 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
5331 * units: deg
5332 * offset 3824
5333 */
5335 /**
5336 * units: Kph
5337 * offset 3828
5338 */
5340 /**
5341 * need 4 byte alignment
5342 * units: units
5343 * offset 3830
5344 */
5345 uint8_t alignmentFill_at_3830[2] = {};
5346 /**
5347 * Exponential Average Alpha filtering parameter
5348 * offset 3832
5349 */
5351 /**
5352 * How often do we update fuel level gauge
5353 * units: seconds
5354 * offset 3836
5355 */
5357 /**
5358 * Error below specified value
5359 * units: v
5360 * offset 3840
5361 */
5363 /**
5364 * Error above specified value
5365 * units: v
5366 * offset 3844
5367 */
5369 /**
5370 * offset 3848
5371 */
5372 float afrExpAverageAlpha;
5373 /**
5374 * Compensates for trigger delay due to belt stretch, or other electromechanical issues. beware that raising this value advances ignition timing!
5375 * units: uS
5376 * offset 3852
5377 */
5378 scaled_channel<uint8_t, 1, 1> sparkHardwareLatencyCorrection;
5379 /**
5380 * Delay before cutting fuel due to extra high oil pressure. Use this to ignore short pressure blips and sensor noise.
5381 * units: sec
5382 * offset 3853
5383 */
5384 scaled_channel<uint8_t, 10, 1> maxOilPressureTimeout;
5385 /**
5386 * units: kg/h
5387 * offset 3854
5388 */
5389 scaled_channel<uint16_t, 100, 1> idleFlowEstimateFlow[8] = {};
5390 /**
5391 * units: %
5392 * offset 3870
5393 */
5394 scaled_channel<uint8_t, 2, 1> idleFlowEstimatePosition[8] = {};
5395 /**
5396 * units: mg
5397 * offset 3878
5398 */
5399 int8_t airmassToTimingBins[8] = {};
5400 /**
5401 * units: deg
5402 * offset 3886
5403 */
5404 int8_t airmassToTimingValues[8] = {};
5405 /**
5406 * idle return target ramp duration
5407 * units: seconds
5408 * offset 3894
5409 */
5410 scaled_channel<uint8_t, 10, 1> idleReturnTargetRampDuration;
5411 /**
5412 * need 4 byte alignment
5413 * units: units
5414 * offset 3895
5415 */
5416 uint8_t alignmentFill_at_3895[1] = {};
5417 /**
5418 * Voltage when the wastegate is fully open
5419 * units: v
5420 * offset 3896
5421 */
5423 /**
5424 * Voltage when the wastegate is closed
5425 * units: v
5426 * offset 3900
5427 */
5429 /**
5430 * offset 3904
5431 */
5432 wbo_s canWbo[CAN_WBO_COUNT] = {};
5433};
5434static_assert(sizeof(engine_configuration_s) == 3912);
5435
5436// start of ign_cyl_trim_s
5437struct ign_cyl_trim_s {
5438 /**
5439 * offset 0
5440 */
5441 scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE] = {};
5442};
5443static_assert(sizeof(ign_cyl_trim_s) == 16);
5444
5445// start of fuel_cyl_trim_s
5446struct fuel_cyl_trim_s {
5447 /**
5448 * offset 0
5449 */
5450 scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE] = {};
5451};
5452static_assert(sizeof(fuel_cyl_trim_s) == 16);
5453
5454// start of blend_table_s
5455struct blend_table_s {
5456 /**
5457 * offset 0
5458 */
5459 scaled_channel<int16_t, 10, 1> table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT] = {};
5460 /**
5461 * units: Load
5462 * offset 128
5463 */
5464 uint16_t loadBins[BLEND_TABLE_COUNT] = {};
5465 /**
5466 * units: RPM
5467 * offset 144
5468 */
5469 uint16_t rpmBins[BLEND_TABLE_COUNT] = {};
5470 /**
5471 * offset 160
5472 */
5474 /**
5475 * offset 161
5476 */
5478 /**
5479 * offset 162
5480 */
5481 scaled_channel<int16_t, 10, 1> blendBins[BLEND_FACTOR_SIZE] = {};
5482 /**
5483 * units: %
5484 * offset 178
5485 */
5486 scaled_channel<uint8_t, 2, 1> blendValues[BLEND_FACTOR_SIZE] = {};
5487 /**
5488 * need 4 byte alignment
5489 * units: units
5490 * offset 186
5491 */
5492 uint8_t alignmentFill_at_186[2] = {};
5493};
5494static_assert(sizeof(blend_table_s) == 188);
5495
5496// start of persistent_config_s
5497struct persistent_config_s {
5498 /**
5499 * offset 0
5500 */
5502 /**
5503 * offset 3912
5504 */
5505 float tmfTable[TMF_RATIO_SIZE][TMF_SIZE] = {};
5506 /**
5507 * offset 3928
5508 */
5509 float tmfRatioBins[TMF_RATIO_SIZE] = {};
5510 /**
5511 * offset 3936
5512 */
5513 float tmfOpeningBins[TMF_SIZE] = {};
5514 /**
5515 * units: Nm
5516 * offset 3944
5517 */
5518 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE] = {};
5519 /**
5520 * units: RPM
5521 * offset 3980
5522 */
5523 uint16_t torqueRpmBins[TORQUE_CURVE_RPM_SIZE] = {};
5524 /**
5525 * units: Load
5526 * offset 3992
5527 */
5528 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
5529 /**
5530 * units: mult
5531 * offset 4004
5532 */
5533 float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT] = {};
5534 /**
5535 * units: count
5536 * offset 4148
5537 */
5538 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
5539 /**
5540 * units: C
5541 * offset 4160
5542 */
5543 int16_t postCrankingCLTBins[CRANKING_ENRICH_CLT_COUNT] = {};
5544 /**
5545 * target TPS value, 0 to 100%
5546 * TODO: use int8 data date once we template interpolation method
5547 * units: target TPS position
5548 * offset 4172
5549 */
5550 float etbBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
5551 /**
5552 * PWM bias, open loop component of PID closed loop control
5553 * units: ETB duty cycle bias
5554 * offset 4204
5555 */
5556 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5557 /**
5558 * target Wastegate value, 0 to 100%
5559 * units: target DC position
5560 * offset 4236
5561 */
5562 int8_t dcWastegateBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
5563 /**
5564 * PWM bias, open loop component of PID closed loop control
5565 * units: DC wastegate duty cycle bias
5566 * offset 4244
5567 */
5568 scaled_channel<int16_t, 100, 1> dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5569 /**
5570 * units: %
5571 * offset 4260
5572 */
5573 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
5574 /**
5575 * units: Load
5576 * offset 4324
5577 */
5578 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
5579 /**
5580 * units: RPM
5581 * offset 4332
5582 */
5583 scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE] = {};
5584 /**
5585 * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
5586 * units: RPM
5587 * offset 4340
5588 */
5589 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
5590 /**
5591 * units: ms
5592 * offset 4356
5593 */
5594 scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE] = {};
5595 /**
5596 * CLT-based target RPM for automatic idle controller
5597 * units: C
5598 * offset 4372
5599 */
5600 scaled_channel<int8_t, 1, 2> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
5601 /**
5602 * See idleRpmPid
5603 * units: RPM
5604 * offset 4388
5605 */
5606 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
5607 /**
5608 * units: deg
5609 * offset 4404
5610 */
5611 scaled_channel<int16_t, 10, 1> ignitionCltCorrTable[CLT_TIMING_CURVE_SIZE][CLT_TIMING_CURVE_SIZE] = {};
5612 /**
5613 * CLT-based timing correction
5614 * units: C
5615 * offset 4454
5616 */
5617 scaled_channel<int8_t, 1, 5> ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE] = {};
5618 /**
5619 * units: Load
5620 * offset 4459
5621 */
5622 scaled_channel<uint8_t, 1, 5> ignitionCltCorrLoadBins[CLT_TIMING_CURVE_SIZE] = {};
5623 /**
5624 * units: x
5625 * offset 4464
5626 */
5627 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
5628 /**
5629 * units: y
5630 * offset 4528
5631 */
5632 float scriptCurve1[SCRIPT_CURVE_16] = {};
5633 /**
5634 * units: x
5635 * offset 4592
5636 */
5637 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
5638 /**
5639 * units: y
5640 * offset 4656
5641 */
5642 float scriptCurve2[SCRIPT_CURVE_16] = {};
5643 /**
5644 * units: x
5645 * offset 4720
5646 */
5647 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
5648 /**
5649 * units: y
5650 * offset 4752
5651 */
5652 float scriptCurve3[SCRIPT_CURVE_8] = {};
5653 /**
5654 * units: x
5655 * offset 4784
5656 */
5657 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
5658 /**
5659 * units: y
5660 * offset 4816
5661 */
5662 float scriptCurve4[SCRIPT_CURVE_8] = {};
5663 /**
5664 * units: x
5665 * offset 4848
5666 */
5667 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
5668 /**
5669 * units: y
5670 * offset 4880
5671 */
5672 float scriptCurve5[SCRIPT_CURVE_8] = {};
5673 /**
5674 * units: x
5675 * offset 4912
5676 */
5677 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
5678 /**
5679 * units: y
5680 * offset 4944
5681 */
5682 float scriptCurve6[SCRIPT_CURVE_8] = {};
5683 /**
5684 * units: kPa
5685 * offset 4976
5686 */
5687 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
5688 /**
5689 * units: RPM
5690 * offset 4992
5691 */
5692 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
5693 /**
5694 * units: ratio
5695 * offset 5008
5696 */
5697 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
5698 /**
5699 * Cranking fuel correction coefficient based on TPS
5700 * units: Ratio
5701 * offset 5072
5702 */
5703 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
5704 /**
5705 * units: %
5706 * offset 5104
5707 */
5708 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
5709 /**
5710 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5711 * units: RPM
5712 * offset 5136
5713 */
5714 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
5715 /**
5716 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5717 * units: deg
5718 * offset 5144
5719 */
5720 scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE] = {};
5721 /**
5722 * RPM-based idle position for coasting
5723 * units: RPM
5724 * offset 5152
5725 */
5726 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
5727 /**
5728 * RPM-based idle position for coasting
5729 * units: %
5730 * offset 5168
5731 */
5732 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
5733 /**
5734 * offset 5184
5735 */
5736 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5737 /**
5738 * units: RPM
5739 * offset 5248
5740 */
5741 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
5742 /**
5743 * offset 5256
5744 */
5745 uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT] = {};
5746 /**
5747 * offset 5272
5748 */
5749 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5750 /**
5751 * offset 5336
5752 */
5753 uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT] = {};
5754 /**
5755 * units: %
5756 * offset 5352
5757 */
5758 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE] = {};
5759 /**
5760 * units: %
5761 * offset 5416
5762 */
5763 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
5764 /**
5765 * units: RPM
5766 * offset 5424
5767 */
5768 scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE] = {};
5769 /**
5770 * CLT-based cranking position % for simple manual idle controller
5771 * units: C
5772 * offset 5432
5773 */
5774 float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE] = {};
5775 /**
5776 * CLT-based cranking position % for simple manual idle controller
5777 * units: percent
5778 * offset 5464
5779 */
5780 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
5781 /**
5782 * units: C
5783 * offset 5496
5784 */
5785 float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
5786 /**
5787 * 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.
5788 * Should be 100 once tune is better
5789 * units: cycles
5790 * offset 5520
5791 */
5792 uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
5793 /**
5794 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5795 * units: RPM
5796 * offset 5532
5797 */
5798 scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE] = {};
5799 /**
5800 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5801 * units: deg
5802 * offset 5540
5803 */
5804 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
5805 /**
5806 * units: RPM
5807 * offset 5572
5808 */
5809 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE] = {};
5810 /**
5811 * units: load
5812 * offset 5576
5813 */
5814 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
5815 /**
5816 * units: %
5817 * offset 5580
5818 */
5819 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE] = {};
5820 /**
5821 * offset 5612
5822 */
5824 /**
5825 * units: C
5826 * offset 13612
5827 */
5828 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
5829 /**
5830 * units: ratio
5831 * offset 13676
5832 */
5833 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
5834 /**
5835 * units: C
5836 * offset 13740
5837 */
5838 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
5839 /**
5840 * units: ratio
5841 * offset 13804
5842 */
5843 float iatFuelCorr[IAT_CURVE_SIZE] = {};
5844 /**
5845 * units: ratio
5846 * offset 13868
5847 */
5848 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
5849 /**
5850 * units: C
5851 * offset 13900
5852 */
5853 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
5854 /**
5855 * units: counter
5856 * offset 13932
5857 */
5858 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
5859 /**
5860 * units: C
5861 * offset 13964
5862 */
5863 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
5864 /**
5865 * Base mass of the per-cylinder fuel injected during cranking. This is then modified by the multipliers for IAT, TPS ect, to give the final cranking pulse width.
5866 * A reasonable starting point is 60mg per liter per cylinder.
5867 * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
5868 * units: mg
5869 * offset 13972
5870 */
5871 float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
5872 /**
5873 * CLT-based idle position for simple manual idle controller
5874 * units: C
5875 * offset 14100
5876 */
5877 float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE] = {};
5878 /**
5879 * CLT-based idle position for simple manual idle controller
5880 * units: %
5881 * offset 14132
5882 */
5883 float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE] = {};
5884 /**
5885 * units: Target RPM
5886 * offset 14196
5887 */
5888 scaled_channel<uint8_t, 1, 100> rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE] = {};
5889 /**
5890 * Long Term Idle Trim (LTIT) multiplicativo para idle open loop
5891 * units: %
5892 * offset 14198
5893 */
5894 scaled_channel<uint16_t, 10, 1> ltitTable[CLT_IDLE_TABLE_CLT_SIZE] = {};
5895 /**
5896 * need 4 byte alignment
5897 * units: units
5898 * offset 14214
5899 */
5900 uint8_t alignmentFill_at_14214[2] = {};
5901 /**
5902 * Also known as MAF transfer function.
5903 * kg/hour value.
5904 * By the way 2.081989116 kg/h = 1 ft3/m
5905 * units: kg/hour
5906 * offset 14216
5907 */
5908 float mafDecoding[MAF_DECODING_COUNT] = {};
5909 /**
5910 * units: V
5911 * offset 14344
5912 */
5913 float mafDecodingBins[MAF_DECODING_COUNT] = {};
5914 /**
5915 * units: deg
5916 * offset 14472
5917 */
5918 scaled_channel<int16_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_COUNT] = {};
5919 /**
5920 * units: C
5921 * offset 14600
5922 */
5923 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_COUNT] = {};
5924 /**
5925 * units: Load
5926 * offset 14608
5927 */
5928 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT] = {};
5929 /**
5930 * units: deg
5931 * offset 14616
5932 */
5933 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
5934 /**
5935 * units: Load
5936 * offset 15128
5937 */
5938 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
5939 /**
5940 * units: RPM
5941 * offset 15160
5942 */
5943 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
5944 /**
5945 * units: onoff
5946 * offset 15192
5947 */
5948 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
5949 /**
5950 * This table represents MAP at a given TPS vs RPM, which we use if our MAP sensor has failed, or if we are using MAP Prediciton.
5951 * This table should be a direct representation of MAP, you can tune it manually by disconnecting MAP sensor, and filling out the table with values that match an external gauge that shows MAP.
5952 * Additionally, you can also use MLV to get the map values and/or generate the table for you
5953 * units: kPa
5954 * offset 15252
5955 */
5956 scaled_channel<uint16_t, 100, 1> mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT] = {};
5957 /**
5958 * units: % TPS
5959 * offset 15764
5960 */
5961 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[MAP_EST_LOAD_COUNT] = {};
5962 /**
5963 * units: RPM
5964 * offset 15796
5965 */
5966 uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT] = {};
5967 /**
5968 * units: value
5969 * offset 15828
5970 */
5971 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5972 /**
5973 * units: L
5974 * offset 15892
5975 */
5976 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
5977 /**
5978 * units: RPM
5979 * offset 15908
5980 */
5981 uint16_t vvtTable1RpmBins[VVT_TABLE_SIZE] = {};
5982 /**
5983 * units: value
5984 * offset 15924
5985 */
5986 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5987 /**
5988 * units: L
5989 * offset 15988
5990 */
5991 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
5992 /**
5993 * units: RPM
5994 * offset 16004
5995 */
5996 uint16_t vvtTable2RpmBins[VVT_TABLE_SIZE] = {};
5997 /**
5998 * units: deg
5999 * offset 16020
6000 */
6001 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
6002 /**
6003 * units: Load
6004 * offset 16532
6005 */
6006 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
6007 /**
6008 * units: RPM
6009 * offset 16564
6010 */
6011 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
6012 /**
6013 * units: %
6014 * offset 16596
6015 */
6016 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
6017 /**
6018 * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
6019 * offset 17108
6020 */
6021 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
6022 /**
6023 * units: RPM
6024 * offset 17140
6025 */
6026 uint16_t veRpmBins[VE_RPM_COUNT] = {};
6027 /**
6028 * units: lambda
6029 * offset 17172
6030 */
6031 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
6032 /**
6033 * offset 17428
6034 */
6035 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
6036 /**
6037 * units: RPM
6038 * offset 17460
6039 */
6040 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
6041 /**
6042 * units: value
6043 * offset 17492
6044 */
6045 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
6046 /**
6047 * units: from
6048 * offset 17748
6049 */
6050 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6051 /**
6052 * units: to
6053 * offset 17780
6054 */
6055 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6056 /**
6057 * units: value
6058 * offset 17812
6059 */
6060 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
6061 /**
6062 * units: L
6063 * offset 18068
6064 */
6065 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
6066 /**
6067 * units: RPM
6068 * offset 18084
6069 */
6070 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
6071 /**
6072 * units: value
6073 * offset 18100
6074 */
6075 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
6076 /**
6077 * units: L
6078 * offset 18356
6079 */
6080 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
6081 /**
6082 * units: RPM
6083 * offset 18372
6084 */
6085 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
6086 /**
6087 * units: value
6088 * offset 18388
6089 */
6090 uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
6091 /**
6092 * units: L
6093 * offset 18452
6094 */
6095 int16_t scriptTable3LoadBins[SCRIPT_TABLE_8] = {};
6096 /**
6097 * units: RPM
6098 * offset 18468
6099 */
6100 int16_t scriptTable3RpmBins[SCRIPT_TABLE_8] = {};
6101 /**
6102 * units: value
6103 * offset 18484
6104 */
6105 uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM] = {};
6106 /**
6107 * units: L
6108 * offset 18564
6109 */
6110 int16_t scriptTable4LoadBins[SCRIPT_TABLE_8] = {};
6111 /**
6112 * units: RPM
6113 * offset 18580
6114 */
6115 int16_t scriptTable4RpmBins[TABLE_4_RPM] = {};
6116 /**
6117 * offset 18600
6118 */
6119 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
6120 /**
6121 * units: rpm
6122 * offset 18608
6123 */
6124 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
6125 /**
6126 * offset 18616
6127 */
6128 ign_cyl_trim_s ignTrims[MAX_CYLINDER_COUNT] = {};
6129 /**
6130 * offset 18808
6131 */
6132 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
6133 /**
6134 * units: rpm
6135 * offset 18816
6136 */
6137 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
6138 /**
6139 * offset 18824
6140 */
6141 fuel_cyl_trim_s fuelTrims[MAX_CYLINDER_COUNT] = {};
6142 /**
6143 * units: ratio
6144 * offset 19016
6145 */
6146 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
6147 /**
6148 * units: Airmass
6149 * offset 19032
6150 */
6151 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
6152 /**
6153 * units: %
6154 * offset 19040
6155 */
6156 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
6157 /**
6158 * units: %
6159 * offset 19048
6160 */
6161 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
6162 /**
6163 * units: %
6164 * offset 19056
6165 */
6166 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
6167 /**
6168 * units: %
6169 * offset 19064
6170 */
6171 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
6172 /**
6173 * units: %
6174 * offset 19072
6175 */
6176 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
6177 /**
6178 * units: %
6179 * offset 19080
6180 */
6181 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
6182 /**
6183 * units: %
6184 * offset 19088
6185 */
6186 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
6187 /**
6188 * units: %
6189 * offset 19096
6190 */
6191 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
6192 /**
6193 * units: %
6194 * offset 19104
6195 */
6196 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
6197 /**
6198 * units: %
6199 * offset 19112
6200 */
6201 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
6202 /**
6203 * units: %
6204 * offset 19120
6205 */
6206 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
6207 /**
6208 * units: %
6209 * offset 19128
6210 */
6211 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
6212 /**
6213 * units: TPS
6214 * offset 19136
6215 */
6216 uint8_t tcu_tccTpsBins[8] = {};
6217 /**
6218 * units: MPH
6219 * offset 19144
6220 */
6221 uint8_t tcu_tccLockSpeed[8] = {};
6222 /**
6223 * units: MPH
6224 * offset 19152
6225 */
6226 uint8_t tcu_tccUnlockSpeed[8] = {};
6227 /**
6228 * units: KPH
6229 * offset 19160
6230 */
6231 uint8_t tcu_32SpeedBins[8] = {};
6232 /**
6233 * units: %
6234 * offset 19168
6235 */
6236 uint8_t tcu_32Vals[8] = {};
6237 /**
6238 * units: %
6239 * offset 19176
6240 */
6241 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE] = {};
6242 /**
6243 * units: %
6244 * offset 19212
6245 */
6246 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
6247 /**
6248 * units: RPM
6249 * offset 19218
6250 */
6251 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_SIZE] = {};
6252 /**
6253 * units: deg
6254 * offset 19224
6255 */
6256 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE] = {};
6257 /**
6258 * units: %
6259 * offset 19260
6260 */
6261 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
6262 /**
6263 * units: RPM
6264 * offset 19266
6265 */
6266 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_SIZE] = {};
6267 /**
6268 * units: deg
6269 * offset 19272
6270 */
6271 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[ALS_SIZE][ALS_SIZE] = {};
6272 /**
6273 * units: TPS
6274 * offset 19304
6275 */
6276 uint16_t alsIgnRetardLoadBins[ALS_SIZE] = {};
6277 /**
6278 * units: RPM
6279 * offset 19312
6280 */
6281 uint16_t alsIgnRetardrpmBins[ALS_SIZE] = {};
6282 /**
6283 * units: percent
6284 * offset 19320
6285 */
6286 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[ALS_SIZE][ALS_SIZE] = {};
6287 /**
6288 * units: TPS
6289 * offset 19352
6290 */
6291 uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE] = {};
6292 /**
6293 * units: RPM
6294 * offset 19360
6295 */
6296 uint16_t alsFuelAdjustmentrpmBins[ALS_SIZE] = {};
6297 /**
6298 * units: ratio
6299 * offset 19368
6300 */
6301 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[ALS_SIZE][ALS_SIZE] = {};
6302 /**
6303 * units: TPS
6304 * offset 19400
6305 */
6306 uint16_t alsIgnSkipLoadBins[ALS_SIZE] = {};
6307 /**
6308 * units: RPM
6309 * offset 19408
6310 */
6311 uint16_t alsIgnSkiprpmBins[ALS_SIZE] = {};
6312 /**
6313 * offset 19416
6314 */
6315 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
6316 /**
6317 * offset 20168
6318 */
6319 blend_table_s veBlends[VE_BLEND_COUNT] = {};
6320 /**
6321 * units: %
6322 * offset 20920
6323 */
6324 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[THR_EST_SIZE] = {};
6325 /**
6326 * In units of g/s normalized to choked flow conditions
6327 * units: g/s
6328 * offset 20944
6329 */
6330 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[THR_EST_SIZE] = {};
6331 /**
6332 * offset 20968
6333 */
6334 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
6335 /**
6336 * offset 21344
6337 */
6338 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
6339 /**
6340 * units: level
6341 * offset 21720
6342 */
6343 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
6344 /**
6345 * units: level
6346 * offset 21744
6347 */
6348 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
6349 /**
6350 * units: level
6351 * offset 21768
6352 */
6353 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
6354 /**
6355 * units: level
6356 * offset 21792
6357 */
6358 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
6359 /**
6360 * units: level
6361 * offset 21816
6362 */
6363 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
6364 /**
6365 * units: level
6366 * offset 21840
6367 */
6368 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
6369 /**
6370 * units: level
6371 * offset 21864
6372 */
6373 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
6374 /**
6375 * units: level
6376 * offset 21888
6377 */
6378 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
6379 /**
6380 * units: level
6381 * offset 21912
6382 */
6383 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
6384 /**
6385 * units: level
6386 * offset 21936
6387 */
6388 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
6389 /**
6390 * units: level
6391 * offset 21960
6392 */
6393 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
6394 /**
6395 * units: lambda
6396 * offset 21984
6397 */
6398 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[LAM_SIZE][LAM_SIZE] = {};
6399 /**
6400 * offset 22000
6401 */
6402 uint16_t lambdaMaxDeviationLoadBins[LAM_SIZE] = {};
6403 /**
6404 * units: RPM
6405 * offset 22008
6406 */
6407 uint16_t lambdaMaxDeviationRpmBins[LAM_SIZE] = {};
6408 /**
6409 * units: %
6410 * offset 22016
6411 */
6412 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT] = {};
6413 /**
6414 * offset 22052
6415 */
6416 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
6417 /**
6418 * units: RPM
6419 * offset 22064
6420 */
6421 uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT] = {};
6422 /**
6423 * units: deg C
6424 * offset 22076
6425 */
6426 int8_t wwCltBins[WWAE_TABLE_SIZE] = {};
6427 /**
6428 * offset 22084
6429 */
6430 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
6431 /**
6432 * offset 22092
6433 */
6434 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
6435 /**
6436 * units: kPa
6437 * offset 22100
6438 */
6439 uint8_t wwMapBins[WWAE_TABLE_SIZE] = {};
6440 /**
6441 * offset 22108
6442 */
6443 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
6444 /**
6445 * offset 22116
6446 */
6447 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
6448 /**
6449 * units: %
6450 * offset 22124
6451 */
6452 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
6453 /**
6454 * units: deg
6455 * offset 22140
6456 */
6457 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
6458 /**
6459 * units: volts
6460 * offset 22156
6461 */
6462 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
6463 /**
6464 * units: ms
6465 * offset 22164
6466 */
6467 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
6468 /**
6469 * units: kPa
6470 * offset 22180
6471 */
6472 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
6473 /**
6474 * units: load
6475 * offset 22380
6476 */
6477 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
6478 /**
6479 * units: RPM
6480 * offset 22400
6481 */
6482 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
6483 /**
6484 * units: %
6485 * offset 22410
6486 */
6487 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE] = {};
6488 /**
6489 * units: cc/lobe
6490 * offset 22510
6491 */
6492 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
6493 /**
6494 * units: RPM
6495 * offset 22530
6496 */
6497 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE] = {};
6498 /**
6499 * units: %
6500 * offset 22540
6501 */
6502 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6503 /**
6504 * units: fuel mass/mg
6505 * offset 22668
6506 */
6507 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6508 /**
6509 * units: bar
6510 * offset 22684
6511 */
6512 scaled_channel<uint16_t, 10, 1> hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6513 /**
6514 * units: ms
6515 * offset 22700
6516 */
6517 scaled_channel<uint16_t, 100, 1> injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE] = {};
6518 /**
6519 * units: fuel mass/mg
6520 * offset 22708
6521 */
6522 scaled_channel<uint16_t, 100, 1> injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE] = {};
6523 /**
6524 * units: bar
6525 * offset 22712
6526 */
6527 scaled_channel<uint16_t, 10, 1> injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE] = {};
6528 /**
6529 * units: RPM
6530 * offset 22716
6531 */
6532 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
6533 /**
6534 * Knock sensor output knock detection threshold depending on current RPM.
6535 * units: dB
6536 * offset 22748
6537 */
6538 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
6539 /**
6540 * units: RPM
6541 * offset 22764
6542 */
6543 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6544 /**
6545 * units: multiplier
6546 * offset 22768
6547 */
6548 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6549 /**
6550 * units: C
6551 * offset 22772
6552 */
6553 scaled_channel<int8_t, 1, 5> cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
6554 /**
6555 * units: RPM
6556 * offset 22776
6557 */
6558 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
6559 /**
6560 * units: volt
6561 * offset 22784
6562 */
6563 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
6564 /**
6565 * units: %
6566 * offset 22800
6567 */
6568 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
6569 /**
6570 * units: volts
6571 * offset 22808
6572 */
6573 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
6574 /**
6575 * units: multiplier
6576 * offset 22816
6577 */
6578 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
6579 /**
6580 * units: %
6581 * offset 22824
6582 */
6583 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
6584 /**
6585 * units: MPH
6586 * offset 22832
6587 */
6588 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
6589 /**
6590 * units: MPH
6591 * offset 22840
6592 */
6593 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
6594 /**
6595 * units: MPH
6596 * offset 22848
6597 */
6598 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
6599 /**
6600 * units: MPH
6601 * offset 22856
6602 */
6603 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
6604 /**
6605 * units: MPH
6606 * offset 22864
6607 */
6608 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
6609 /**
6610 * units: MPH
6611 * offset 22872
6612 */
6613 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
6614 /**
6615 * units: ms
6616 * offset 22880
6617 */
6618 float tcu_shiftTime;
6619 /**
6620 * units: volts
6621 * offset 22884
6622 */
6623 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6624 /**
6625 * units: Load
6626 * offset 22916
6627 */
6628 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6629 /**
6630 * units: RPM
6631 * offset 22924
6632 */
6633 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6634 /**
6635 * units: C
6636 * offset 22932
6637 */
6638 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
6639 /**
6640 * units: ratio
6641 * offset 22952
6642 */
6643 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
6644 /**
6645 * units: C
6646 * offset 22972
6647 */
6648 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
6649 /**
6650 * units: ratio
6651 * offset 22992
6652 */
6653 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
6654 /**
6655 * units: C
6656 * offset 23012
6657 */
6658 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
6659 /**
6660 * offset 23032
6661 */
6662 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
6663 /**
6664 * units: C
6665 * offset 23052
6666 */
6667 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
6668 /**
6669 * offset 23072
6670 */
6671 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
6672 /**
6673 * units: RPM
6674 * offset 23092
6675 */
6676 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
6677 /**
6678 * units: kPa
6679 * offset 23100
6680 */
6681 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
6682 /**
6683 * offset 23108
6684 */
6685 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
6686 /**
6687 * @@DYNO_RPM_STEP_TOOLTIP@@
6688 * units: Rpm
6689 * offset 23484
6690 */
6691 scaled_channel<uint8_t, 1, 1> dynoRpmStep;
6692 /**
6693 * @@DYNO_SAE_TEMPERATURE_C_TOOLTIP@@
6694 * units: C
6695 * offset 23485
6696 */
6697 scaled_channel<int8_t, 1, 1> dynoSaeTemperatureC;
6698 /**
6699 * @@DYNO_SAE_RELATIVE_HUMIDITY_TOOLTIP@@
6700 * units: %
6701 * offset 23486
6702 */
6703 scaled_channel<uint8_t, 1, 1> dynoSaeRelativeHumidity;
6704 /**
6705 * need 4 byte alignment
6706 * units: units
6707 * offset 23487
6708 */
6709 uint8_t alignmentFill_at_23487[1] = {};
6710 /**
6711 * @@DYNO_SAE_BARO_TOOLTIP@@
6712 * units: KPa
6713 * offset 23488
6714 */
6715 scaled_channel<float, 1, 1> dynoSaeBaro;
6716 /**
6717 * @@DYNO_CAR_WHEEL_DIA_INCH_TOOLTIP@@
6718 * units: Inch
6719 * offset 23492
6720 */
6721 scaled_channel<int8_t, 1, 1> dynoCarWheelDiaInch;
6722 /**
6723 * @@DYNO_CAR_WHEEL_ASPECT_RATIO_TOOLTIP@@
6724 * units: Aspect Ratio (height)
6725 * offset 23493
6726 */
6727 scaled_channel<int8_t, 1, 1> dynoCarWheelAspectRatio;
6728 /**
6729 * @@DYNO_CAR_WHEEL_TIRE_WIDTH_TOOLTIP@@
6730 * units: Width mm
6731 * offset 23494
6732 */
6733 scaled_channel<int16_t, 1, 1> dynoCarWheelTireWidthMm;
6734 /**
6735 * @@DYNO_CAR_GEAR_PRIMARY_REDUCTION_TOOLTIP@@
6736 * units: Units
6737 * offset 23496
6738 */
6739 scaled_channel<float, 1, 1> dynoCarGearPrimaryReduction;
6740 /**
6741 * @@DYNO_CAR_GEAR_RATIO_TOOLTIP@@
6742 * units: Units
6743 * offset 23500
6744 */
6745 scaled_channel<float, 1, 1> dynoCarGearRatio;
6746 /**
6747 * @@DYNO_CAR_GEAR_FINAL_DRIVE_TOOLTIP@@
6748 * units: Units
6749 * offset 23504
6750 */
6751 scaled_channel<float, 1, 1> dynoCarGearFinalDrive;
6752 /**
6753 * @@DYNO_CAR_CAR_MASS_TOOLTIP@@
6754 * units: Kg
6755 * offset 23508
6756 */
6757 scaled_channel<int16_t, 1, 1> dynoCarCarMassKg;
6758 /**
6759 * @@DYNO_CAR_CARGO_MASS_TOOLTIP@@
6760 * units: Kg
6761 * offset 23510
6762 */
6763 scaled_channel<int16_t, 1, 1> dynoCarCargoMassKg;
6764 /**
6765 * @@DYNO_CAR_COEFF_OF_DRAG_TOOLTIP@@
6766 * units: Coeff
6767 * offset 23512
6768 */
6769 scaled_channel<float, 1, 1> dynoCarCoeffOfDrag;
6770 /**
6771 * @@DYNO_CAR_FRONTAL_AREA_TOOLTIP@@
6772 * units: m2
6773 * offset 23516
6774 */
6775 scaled_channel<float, 1, 1> dynoCarFrontalAreaM2;
6776 /**
6777 * units: deg
6778 * offset 23520
6779 */
6780 scaled_channel<int8_t, 10, 1> trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_SIZE] = {};
6781 /**
6782 * units: rpm
6783 * offset 23536
6784 */
6785 scaled_channel<uint8_t, 1, 50> trailingSparkRpmBins[TRAILING_SPARK_SIZE] = {};
6786 /**
6787 * units: Load
6788 * offset 23540
6789 */
6790 scaled_channel<uint8_t, 1, 5> trailingSparkLoadBins[TRAILING_SPARK_SIZE] = {};
6791 /**
6792 * units: RPM
6793 * offset 23544
6794 */
6795 scaled_channel<uint8_t, 1, 100> maximumOilPressureBins[4] = {};
6796 /**
6797 * units: kPa
6798 * offset 23548
6799 */
6800 scaled_channel<uint8_t, 1, 10> maximumOilPressureValues[4] = {};
6801 /**
6802 * Selects the X axis to use for the table.
6803 * offset 23552
6804 */
6806 /**
6807 * How many % of ignition events will be cut
6808 * units: %
6809 * offset 23553
6810 */
6811 int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6812 /**
6813 * need 4 byte alignment
6814 * units: units
6815 * offset 23565
6816 */
6817 uint8_t alignmentFill_at_23565[1] = {};
6818 /**
6819 * offset 23566
6820 */
6821 int16_t torqueReductionCutXBins[TORQUE_TABLE_X_SIZE] = {};
6822 /**
6823 * units: gear N°
6824 * offset 23578
6825 */
6826 int8_t torqueReductionCutGearBins[TORQUE_TABLE_Y_SIZE] = {};
6827 /**
6828 * Selects the X axis to use for the table.
6829 * offset 23580
6830 */
6832 /**
6833 * need 4 byte alignment
6834 * units: units
6835 * offset 23581
6836 */
6837 uint8_t alignmentFill_at_23581[3] = {};
6838 /**
6839 * For how long after the pin has been triggered will the cut/reduction stay active. After that, even if the pin is still triggered, torque is re-introduced
6840 * units: ms
6841 * offset 23584
6842 */
6843 float torqueReductionTimeTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6844 /**
6845 * offset 23632
6846 */
6847 int16_t torqueReductionTimeXBins[TORQUE_TABLE_X_SIZE] = {};
6848 /**
6849 * units: gear N°
6850 * offset 23644
6851 */
6852 int8_t torqueReductionTimeGearBins[TORQUE_TABLE_Y_SIZE] = {};
6853 /**
6854 * Selects the X axis to use for the table.
6855 * offset 23646
6856 */
6858 /**
6859 * need 4 byte alignment
6860 * units: units
6861 * offset 23647
6862 */
6863 uint8_t alignmentFill_at_23647[1] = {};
6864 /**
6865 * How many degrees of timing advance will be reduced during the Torque Reduction Time
6866 * units: deg
6867 * offset 23648
6868 */
6869 float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6870 /**
6871 * offset 23696
6872 */
6873 int16_t torqueReductionIgnitionRetardXBins[TORQUE_TABLE_X_SIZE] = {};
6874 /**
6875 * units: gear N°
6876 * offset 23708
6877 */
6878 int8_t torqueReductionIgnitionRetardGearBins[TORQUE_TABLE_Y_SIZE] = {};
6879 /**
6880 * need 4 byte alignment
6881 * units: units
6882 * offset 23710
6883 */
6884 uint8_t alignmentFill_at_23710[2] = {};
6885};
6886static_assert(sizeof(persistent_config_s) == 23712);
6887
6888// end
6889// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
torqueReductionTable torqueReductionTimeTable
engine_type_e
debug_mode_e
trigger_type_e
firing_order_e
ve_override_e
idle_mode_e
MsIoBoxVss
launchActivationMode_e
can_wbo_aem_id_e
InjectorNonlinearMode
boostType_e
MsIoBoxId
tle8888_mode_e
lua_gauge_e
mc33810maxDwellTimer_e
ignition_mode_e
vvt_mode_e
stepper_num_micro_steps_e
gppwm_channel_e
air_pressure_sensor_type_e
can_wbo_type_e
dc_function_e
can_wbo_re_id_e
SentInput
ego_sensor_e
load_override_e
injector_pressure_type_e
SentFuelHighPressureType
injector_compensation_mode_e
SentEtbType
uart_device_e
InjectionTimingMode
nitrous_arming_method_e
can_vss_nbc_e
CanGpioType
spi_device_e
pin_input_mode_e
fuel_pressure_sensor_mode_e
hpfp_cam_e
can_baudrate_e
antiLagActivationMode_e
injection_mode_e
timing_mode_e
can_nbc_e
UiMode
imu_type_e
torqueReductionActivationMode_e
TransmissionControllerMode
pin_output_mode_e
tChargeMode_e
GearControllerMode
accel_enrichment_mode_e
lua_gauge_meaning_e
int16_t pwm_freq_t
uint8_t engineSyncCam_e
char[LUA_SCRIPT_SIZE] lua_script_t
char[VIN_NUMBER_SIZE] vin_number_t
float angle_t
char[VEHICLE_INFO_SIZE] vehicle_info_t
char[GPPWM_NOTE_SIZE] gppwm_note_t
scaled_channel< int16_t, 10, 1 > blendBins[BLEND_FACTOR_SIZE]
scaled_channel< uint8_t, 2, 1 > blendValues[BLEND_FACTOR_SIZE]
scaled_channel< int16_t, 10, 1 > table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT]
scaled_channel< uint16_t, 100, 1 > gearRatio[TCU_GEAR_COUNT]
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT]
scaled_channel< int16_t, 1, 1 > primeBins[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT]
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT]
scaled_channel< int8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT]
int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT]
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]
scaled_channel< int16_t, 100, 1 > battLagCorrBattBins[VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint32_t, 10, 1 > battLagCorrPressBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint8_t, 10, 1 > maxRemove
scaled_channel< uint8_t, 10, 1 > deadband
scaled_channel< uint16_t, 1, 1 > timeConstant
scaled_channel< uint8_t, 10, 1 > maxAdd
scaled_channel< uint8_t, 1, 100 > maxKnockRetardRpmBins[KNOCK_TABLE_SIZE]
scaled_channel< uint16_t, 10, 1 > injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE]
float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE]
scaled_channel< int16_t, 10, 1 > ALSFuelAdjustment[ALS_SIZE][ALS_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int16_t, 1, 1 > cltIdleRpmBins[CLT_CURVE_SIZE]
scaled_channel< int16_t, 100, 1 > dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH]
uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE]
scaled_channel< uint8_t, 1, 100 > maximumOilPressureBins[4]
uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
scaled_channel< int16_t, 1, 10 > ALSIgnSkipTable[ALS_SIZE][ALS_SIZE]
float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE]
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]
scaled_channel< uint8_t, 4, 1 > maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > wwTauMapValues[WWAE_TABLE_SIZE]
scaled_channel< int8_t, 2, 1 > knockBaseNoise[ENGINE_NOISE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE]
uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE]
int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT]
scaled_channel< uint8_t, 1, 5 > tcu_pcAirmassBins[TCU_TABLE_WIDTH]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE]
float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaValues[THR_EST_SIZE]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
scaled_channel< int16_t, 100, 1 > crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > throttle2TrimRpmBins[ETB2_TRIM_SIZE]
float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< uint8_t, 1, 10 > minimumOilPressureValues[8]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaBins[THR_EST_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< int8_t, 10, 1 > trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 1, 5 > trailingSparkLoadBins[TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 100, 1 > wwBetaMapValues[WWAE_TABLE_SIZE]
scaled_channel< uint16_t, 10, 1 > veTable[VE_LOAD_COUNT][VE_RPM_COUNT]
scaled_channel< uint8_t, 100, 1 > wwBetaCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > lambdaMaxDeviationTable[LAM_SIZE][LAM_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[MAP_EST_LOAD_COUNT]
scaled_channel< int16_t, 10, 1 > ignitionCltCorrTable[CLT_TIMING_CURVE_SIZE][CLT_TIMING_CURVE_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpDeadtimeMS[HPFP_DEADTIME_SIZE]
float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT]
scaled_channel< uint8_t, 100, 1 > wwTauCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE]
scaled_channel< int16_t, 1, 1 > cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 1 > tcu_shiftTpsBins[TCU_TABLE_WIDTH]
scaled_channel< uint16_t, 10, 1 > ltitTable[CLT_IDLE_TABLE_CLT_SIZE]
scaled_channel< int16_t, 1, 1 > ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE]
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< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE]
scaled_channel< uint8_t, 1, 100 > rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > crankingFuelCoefE100[CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > trailingSparkRpmBins[TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_COUNT]
float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE]
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, 1, 5 > ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT]
scaled_channel< uint8_t, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
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, 10 > maximumOilPressureValues[4]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 147, 1 > lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< int16_t, 10, 1 > ALSTimingRetardTable[ALS_SIZE][ALS_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE]
uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< uint8_t, 1, 5 > ignitionCltCorrLoadBins[CLT_TIMING_CURVE_SIZE]
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]