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