rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_f429-discovery.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 2444
4347 */
4348 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4349 /**
4350 * offset 2460
4351 */
4353 /**
4354 * need 4 byte alignment
4355 * units: units
4356 * offset 2461
4357 */
4358 uint8_t alignmentFill_at_2461[3] = {};
4359 /**
4360 * offset 2464
4361 */
4362 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
4363 /**
4364 * Boost Current
4365 * units: mA
4366 * offset 2896
4367 */
4368 uint16_t mc33_i_boost;
4369 /**
4370 * Peak Current
4371 * units: mA
4372 * offset 2898
4373 */
4374 uint16_t mc33_i_peak;
4375 /**
4376 * Hold Current
4377 * units: mA
4378 * offset 2900
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 2902
4385 */
4386 uint16_t mc33_t_max_boost;
4387 /**
4388 * units: us
4389 * offset 2904
4390 */
4391 uint16_t mc33_t_peak_off;
4392 /**
4393 * Peak phase duration
4394 * units: us
4395 * offset 2906
4396 */
4397 uint16_t mc33_t_peak_tot;
4398 /**
4399 * units: us
4400 * offset 2908
4401 */
4402 uint16_t mc33_t_bypass;
4403 /**
4404 * units: us
4405 * offset 2910
4406 */
4407 uint16_t mc33_t_hold_off;
4408 /**
4409 * Hold phase duration
4410 * units: us
4411 * offset 2912
4412 */
4413 uint16_t mc33_t_hold_tot;
4414 /**
4415 * offset 2914
4416 */
4418 /**
4419 * offset 2915
4420 */
4422 /**
4423 * offset 2916
4424 */
4426 /**
4427 * offset 2917
4428 */
4429 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
4430 /**
4431 * need 4 byte alignment
4432 * units: units
4433 * offset 2923
4434 */
4435 uint8_t alignmentFill_at_2923[1] = {};
4436 /**
4437 * units: ratio
4438 * offset 2924
4439 */
4440 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
4441 /**
4442 * units: ratio
4443 * offset 2996
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 3068
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 3069
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 3070
4462 */
4463 scaled_channel<uint8_t, 10, 1> acDelay;
4464 /**
4465 * offset 3071
4466 */
4468 /**
4469 * units: mg
4470 * offset 3072
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 3074
4477 */
4478 uint8_t etbJamDetectThreshold;
4479 /**
4480 * units: lobes/cam
4481 * offset 3075
4482 */
4483 uint8_t hpfpCamLobes;
4484 /**
4485 * offset 3076
4486 */
4488 /**
4489 * Low engine speed for A/C. Larger engines can survive lower values
4490 * units: RPM
4491 * offset 3077
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 3078
4498 */
4499 uint8_t hpfpMinAngle;
4500 /**
4501 * need 4 byte alignment
4502 * units: units
4503 * offset 3079
4504 */
4505 uint8_t alignmentFill_at_3079[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 3080
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 3082
4517 */
4518 uint8_t hpfpActivationAngle;
4519 /**
4520 * offset 3083
4521 */
4522 uint8_t issFilterReciprocal;
4523 /**
4524 * units: %/kPa
4525 * offset 3084
4526 */
4527 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
4528 /**
4529 * units: %/kPa/lobe
4530 * offset 3086
4531 */
4532 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
4533 /**
4534 * iTerm min value
4535 * offset 3088
4536 */
4537 int16_t hpfpPid_iTermMin;
4538 /**
4539 * iTerm max value
4540 * offset 3090
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 3092
4547 */
4548 uint16_t hpfpTargetDecay;
4549 /**
4550 * offset 3094
4551 */
4553 /**
4554 * units: ratio
4555 * offset 3102
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 3122
4562 */
4563 uint16_t vvtActivationDelayMs;
4564 /**
4565 * offset 3124
4566 */
4568 /**
4569 * offset 3125
4570 */
4572 /**
4573 * During revolution where ACR should be disabled at what specific angle to disengage
4574 * units: deg
4575 * offset 3126
4576 */
4577 uint16_t acrDisablePhase;
4578 /**
4579 * offset 3128
4580 */
4582 /**
4583 * offset 3148
4584 */
4586 /**
4587 * offset 3168
4588 */
4590 /**
4591 * offset 3170
4592 */
4594 /**
4595 * need 4 byte alignment
4596 * units: units
4597 * offset 3171
4598 */
4599 uint8_t alignmentFill_at_3171[1] = {};
4600 /**
4601 * offset 3172
4602 */
4604 /**
4605 * offset 3174
4606 */
4608 /**
4609 * need 4 byte alignment
4610 * units: units
4611 * offset 3175
4612 */
4613 uint8_t alignmentFill_at_3175[1] = {};
4614 /**
4615 * offset 3176
4616 */
4618 /**
4619 * offset 3178
4620 */
4622 /**
4623 * offset 3180
4624 */
4626 /**
4627 * need 4 byte alignment
4628 * units: units
4629 * offset 3181
4630 */
4631 uint8_t alignmentFill_at_3181[1] = {};
4632 /**
4633 * offset 3182
4634 */
4636 /**
4637 * offset 3184
4638 */
4640 /**
4641 * offset 3186
4642 */
4644 /**
4645 * need 4 byte alignment
4646 * units: units
4647 * offset 3187
4648 */
4649 uint8_t alignmentFill_at_3187[1] = {};
4650 /**
4651 * offset 3188
4652 */
4654 /**
4655 * offset 3190
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 3192
4662 */
4663 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
4664 /**
4665 * need 4 byte alignment
4666 * units: units
4667 * offset 3193
4668 */
4669 uint8_t alignmentFill_at_3193[1] = {};
4670 /**
4671 * offset 3194
4672 */
4673 uint16_t tuneHidingKey;
4674 /**
4675 * Individual characters are accessible using vin(index) Lua function
4676 * offset 3196
4677 */
4679 /**
4680 * units: SPECIAL_CASE_TEMPERATURE
4681 * offset 3213
4682 */
4684 /**
4685 * offset 3214
4686 */
4688 /**
4689 * need 4 byte alignment
4690 * units: units
4691 * offset 3215
4692 */
4693 uint8_t alignmentFill_at_3215[1] = {};
4694 /**
4695 * offset 3216
4696 */
4697 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
4698 /**
4699 * units: rpm
4700 * offset 3232
4701 */
4702 int16_t ALSMinRPM;
4703 /**
4704 * units: rpm
4705 * offset 3234
4706 */
4707 int16_t ALSMaxRPM;
4708 /**
4709 * units: sec
4710 * offset 3236
4711 */
4712 int16_t ALSMaxDuration;
4713 /**
4714 * units: SPECIAL_CASE_TEMPERATURE
4715 * offset 3238
4716 */
4717 int8_t ALSMinCLT;
4718 /**
4719 * units: SPECIAL_CASE_TEMPERATURE
4720 * offset 3239
4721 */
4722 int8_t ALSMaxCLT;
4723 /**
4724 * offset 3240
4725 */
4726 uint8_t alsMinTimeBetween;
4727 /**
4728 * offset 3241
4729 */
4730 uint8_t alsEtbPosition;
4731 /**
4732 * units: %
4733 * offset 3242
4734 */
4736 /**
4737 * If you have SENT TPS sensor please select type. For analog TPS leave None
4738 * offset 3243
4739 */
4741 /**
4742 * offset 3244
4743 */
4744 uint16_t customSentTpsMin;
4745 /**
4746 * need 4 byte alignment
4747 * units: units
4748 * offset 3246
4749 */
4750 uint8_t alignmentFill_at_3246[2] = {};
4751 /**
4752 * units: %
4753 * offset 3248
4754 */
4755 int ALSIdleAdd;
4756 /**
4757 * units: %
4758 * offset 3252
4759 */
4760 int ALSEtbAdd;
4761 /**
4762 * offset 3256
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 3260
4769 */
4770 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
4771 /**
4772 * offset 3261
4773 */
4775 /**
4776 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4777 * units: %
4778 * offset 3262
4779 */
4780 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4781 /**
4782 * For Toyota ETCS-i, use ~69%
4783 * units: %
4784 * offset 3263
4785 */
4786 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4787 /**
4788 * offset 3264
4789 */
4790 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
4791 /**
4792 * offset 3272
4793 */
4794 uint16_t customSentTpsMax;
4795 /**
4796 * offset 3274
4797 */
4798 uint16_t kLineBaudRate;
4799 /**
4800 * offset 3276
4801 */
4803 /**
4804 * offset 3277
4805 */
4806 UiMode uiMode;
4807 /**
4808 * Crank angle ATDC of first lobe peak
4809 * units: deg
4810 * offset 3278
4811 */
4812 int16_t hpfpPeakPos;
4813 /**
4814 * units: us
4815 * offset 3280
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 3282
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 3283
4828 */
4829 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4830 /**
4831 * % of fuel ADDED during window
4832 * units: %
4833 * offset 3284
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 3285
4841 */
4842 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4843 /**
4844 * Time between bench test pulses
4845 * units: ms
4846 * offset 3286
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 3288
4854 */
4855 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4856 /**
4857 * Boost duty cycle modified by gear
4858 * units: %
4859 * offset 3289
4860 */
4861 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
4862 /**
4863 * need 4 byte alignment
4864 * units: units
4865 * offset 3299
4866 */
4867 uint8_t alignmentFill_at_3299[1] = {};
4868 /**
4869 * How many test bench pulses do you want
4870 * offset 3300
4871 */
4872 uint32_t benchTestCount;
4873 /**
4874 * How long initial idle adder is held before starting to decay.
4875 * units: seconds
4876 * offset 3304
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 3305
4883 */
4884 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4885 /**
4886 * offset 3306
4887 */
4888 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
4889 /**
4890 * offset 3318
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 3324
4897 */
4898 scaled_channel<uint16_t, 10000, 1> canVssScaling;
4899 /**
4900 * need 4 byte alignment
4901 * units: units
4902 * offset 3326
4903 */
4904 uint8_t alignmentFill_at_3326[2] = {};
4905 /**
4906 * offset 3328
4907 */
4909 /**
4910 * offset 3360
4911 */
4913 /**
4914 * offset 3392
4915 */
4917 /**
4918 * offset 3424
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 3456
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 3457
4929 */
4931 /**
4932 * offset 3458
4933 */
4934 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
4935 /**
4936 * offset 3462
4937 */
4939 /**
4940 * Number of speedometer pulses per kilometer travelled.
4941 * offset 3464
4942 */
4943 uint16_t speedometerPulsePerKm;
4944 /**
4945 * offset 3466
4946 */
4947 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
4948 /**
4949 * offset 3470
4950 */
4952 /**
4953 * need 4 byte alignment
4954 * units: units
4955 * offset 3471
4956 */
4957 uint8_t alignmentFill_at_3471[1] = {};
4958 /**
4959 * offset 3472
4960 */
4961 float ignKeyAdcDivider;
4962 /**
4963 * offset 3476
4964 */
4966 /**
4967 * need 4 byte alignment
4968 * units: units
4969 * offset 3477
4970 */
4971 uint8_t alignmentFill_at_3477[3] = {};
4972 /**
4973 * units: ratio
4974 * offset 3480
4975 */
4976 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
4977 /**
4978 * units: ratio
4979 * offset 3496
4980 */
4981 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
4982 /**
4983 * units: %
4984 * offset 3512
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 3672
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 3673
4997 */
4999 /**
5000 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
5001 * units: sec
5002 * offset 3674
5003 */
5004 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
5005 /**
5006 * need 4 byte alignment
5007 * units: units
5008 * offset 3675
5009 */
5010 uint8_t alignmentFill_at_3675[1] = {};
5011 /**
5012 * offset 3676
5013 */
5014 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
5015 /**
5016 * units: Deg
5017 * offset 3700
5018 */
5019 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5020 /**
5021 * units: %
5022 * offset 3860
5023 */
5024 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5025 /**
5026 * offset 4020
5027 */
5028 float auxSpeed1Multiplier;
5029 /**
5030 * offset 4024
5031 */
5033 /**
5034 * offset 4028
5035 */
5037 /**
5038 * offset 4030
5039 */
5041 /**
5042 * offset 4032
5043 */
5045 /**
5046 * offset 4034
5047 */
5049 /**
5050 * offset 4036
5051 */
5053 /**
5054 * offset 4038
5055 */
5057 /**
5058 * offset 4040
5059 */
5061 /**
5062 * offset 4042
5063 */
5065 /**
5066 * offset 4044
5067 */
5069 /**
5070 * offset 4046
5071 */
5073 /**
5074 * offset 4047
5075 */
5077 /**
5078 * offset 4048
5079 */
5081 /**
5082 * offset 4049
5083 */
5085 /**
5086 * offset 4050
5087 */
5089 /**
5090 * offset 4051
5091 */
5093 /**
5094 * offset 4052
5095 */
5097 /**
5098 * offset 4053
5099 */
5101 /**
5102 * need 4 byte alignment
5103 * units: units
5104 * offset 4054
5105 */
5106 uint8_t alignmentFill_at_4054[2] = {};
5107 /**
5108 * Secondary TTL channel baud rate
5109 * units: BPs
5110 * offset 4056
5111 */
5112 uint32_t tunerStudioSerialSpeed;
5113 /**
5114 * offset 4060
5115 */
5117 /**
5118 * offset 4062
5119 */
5121 /**
5122 * need 4 byte alignment
5123 * units: units
5124 * offset 4063
5125 */
5126 uint8_t alignmentFill_at_4063[1] = {};
5127 /**
5128 * offset 4064
5129 */
5130 int anotherCiTest;
5131 /**
5132 * offset 4068
5133 */
5134 uint32_t device_uid[3] = {};
5135 /**
5136 * offset 4080
5137 */
5138 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
5139 /**
5140 * need 4 byte alignment
5141 * units: units
5142 * offset 4086
5143 */
5144 uint8_t alignmentFill_at_4086[2] = {};
5145 /**
5146 * units: Ohm
5147 * offset 4088
5148 */
5150 /**
5151 * offset 4092
5152 */
5154 /**
5155 * Nominal coil charge current, 0.25A step
5156 * units: A
5157 * offset 4096
5158 */
5159 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
5160 /**
5161 * Maximum coil charge current, 1A step
5162 * units: A
5163 * offset 4097
5164 */
5165 uint8_t mc33810Maxi;
5166 /**
5167 * need 4 byte alignment
5168 * units: units
5169 * offset 4098
5170 */
5171 uint8_t alignmentFill_at_4098[2] = {};
5172 /**
5173 * offset 4100
5174 */
5176 /**
5177 * value of A/C pressure in kPa/psi before that compressor is disengaged
5178 * units: SPECIAL_CASE_PRESSURE
5179 * offset 4120
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 4122
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 4124
5192 */
5193 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
5194 /**
5195 * need 4 byte alignment
5196 * units: units
5197 * offset 4125
5198 */
5199 uint8_t alignmentFill_at_4125[3] = {};
5200 /**
5201 * offset 4128
5202 */
5204 /**
5205 * offset 4148
5206 */
5208 /**
5209 * Below TPS value all knock suppression will be disabled.
5210 * units: %
5211 * offset 4168
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 4169
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 4170
5224 */
5225 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
5226 /**
5227 * Fuel trim when knock, max 30%
5228 * units: %
5229 * offset 4171
5230 */
5231 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
5232 /**
5233 * units: sense
5234 * offset 4172
5235 */
5237 /**
5238 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
5239 * units: Hz
5240 * offset 4176
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 4180
5248 */
5250 /**
5251 * need 4 byte alignment
5252 * units: units
5253 * offset 4181
5254 */
5255 uint8_t alignmentFill_at_4181[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 4184
5261 */
5263 /**
5264 * SENT input connected to ETB
5265 * offset 4188
5266 */
5268 /**
5269 * SENT input used for high pressure fuel sensor
5270 * offset 4189
5271 */
5273 /**
5274 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
5275 * offset 4190
5276 */
5278 /**
5279 * need 4 byte alignment
5280 * units: units
5281 * offset 4191
5282 */
5283 uint8_t alignmentFill_at_4191[1] = {};
5284 /**
5285 offset 4192 bit 0 */
5286 bool nitrousControlEnabled : 1 {};
5287 /**
5288 offset 4192 bit 1 */
5289 bool vvlControlEnabled : 1 {};
5290 /**
5291 offset 4192 bit 2 */
5292 bool unusedFancy3 : 1 {};
5293 /**
5294 offset 4192 bit 3 */
5295 bool unusedFancy4 : 1 {};
5296 /**
5297 offset 4192 bit 4 */
5298 bool unusedFancy5 : 1 {};
5299 /**
5300 offset 4192 bit 5 */
5301 bool unusedFancy6 : 1 {};
5302 /**
5303 offset 4192 bit 6 */
5304 bool unusedFancy7 : 1 {};
5305 /**
5306 offset 4192 bit 7 */
5307 bool unusedFancy8 : 1 {};
5308 /**
5309 offset 4192 bit 8 */
5310 bool unusedFancy9 : 1 {};
5311 /**
5312 offset 4192 bit 9 */
5313 bool unusedFancy10 : 1 {};
5314 /**
5315 offset 4192 bit 10 */
5316 bool unusedFancy11 : 1 {};
5317 /**
5318 offset 4192 bit 11 */
5319 bool unusedFancy12 : 1 {};
5320 /**
5321 offset 4192 bit 12 */
5322 bool unusedFancy13 : 1 {};
5323 /**
5324 offset 4192 bit 13 */
5325 bool unusedFancy14 : 1 {};
5326 /**
5327 offset 4192 bit 14 */
5328 bool unusedFancy15 : 1 {};
5329 /**
5330 offset 4192 bit 15 */
5331 bool unusedFancy16 : 1 {};
5332 /**
5333 offset 4192 bit 16 */
5334 bool unusedFancy17 : 1 {};
5335 /**
5336 offset 4192 bit 17 */
5337 bool unusedFancy18 : 1 {};
5338 /**
5339 offset 4192 bit 18 */
5340 bool unusedFancy19 : 1 {};
5341 /**
5342 offset 4192 bit 19 */
5343 bool unusedFancy20 : 1 {};
5344 /**
5345 offset 4192 bit 20 */
5346 bool unusedFancy21 : 1 {};
5347 /**
5348 offset 4192 bit 21 */
5349 bool unusedFancy22 : 1 {};
5350 /**
5351 offset 4192 bit 22 */
5352 bool unusedFancy23 : 1 {};
5353 /**
5354 offset 4192 bit 23 */
5355 bool unusedFancy24 : 1 {};
5356 /**
5357 offset 4192 bit 24 */
5358 bool unusedFancy25 : 1 {};
5359 /**
5360 offset 4192 bit 25 */
5361 bool unusedFancy26 : 1 {};
5362 /**
5363 offset 4192 bit 26 */
5364 bool unusedFancy27 : 1 {};
5365 /**
5366 offset 4192 bit 27 */
5367 bool unusedFancy28 : 1 {};
5368 /**
5369 offset 4192 bit 28 */
5370 bool unusedFancy29 : 1 {};
5371 /**
5372 offset 4192 bit 29 */
5373 bool unusedFancy30 : 1 {};
5374 /**
5375 offset 4192 bit 30 */
5376 bool unusedFancy31 : 1 {};
5377 /**
5378 offset 4192 bit 31 */
5379 bool unusedFancy32 : 1 {};
5380 /**
5381 * offset 4196
5382 */
5384 /**
5385 * need 4 byte alignment
5386 * units: units
5387 * offset 4197
5388 */
5389 uint8_t alignmentFill_at_4197[1] = {};
5390 /**
5391 * Pin that activates nitrous control
5392 * offset 4198
5393 */
5395 /**
5396 * offset 4200
5397 */
5399 /**
5400 * offset 4201
5401 */
5403 /**
5404 * offset 4202
5405 */
5407 /**
5408 * need 4 byte alignment
5409 * units: units
5410 * offset 4203
5411 */
5412 uint8_t alignmentFill_at_4203[1] = {};
5413 /**
5414 * offset 4204
5415 */
5417 /**
5418 * offset 4208
5419 */
5421 /**
5422 * units: SPECIAL_CASE_TEMPERATURE
5423 * offset 4212
5424 */
5425 int16_t nitrousMinimumClt;
5426 /**
5427 * units: SPECIAL_CASE_PRESSURE
5428 * offset 4214
5429 */
5430 int16_t nitrousMaximumMap;
5431 /**
5432 * units: afr
5433 * offset 4216
5434 */
5435 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
5436 /**
5437 * need 4 byte alignment
5438 * units: units
5439 * offset 4217
5440 */
5441 uint8_t alignmentFill_at_4217[1] = {};
5442 /**
5443 * units: rpm
5444 * offset 4218
5445 */
5446 uint16_t nitrousActivationRpm;
5447 /**
5448 * units: rpm
5449 * offset 4220
5450 */
5451 uint16_t nitrousDeactivationRpm;
5452 /**
5453 * units: rpm
5454 * offset 4222
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 4224
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 4225
5467 */
5468 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
5469 /**
5470 * offset 4226
5471 */
5473 /**
5474 * offset 4228
5475 */
5477 /**
5478 * units: %
5479 * offset 4229
5480 */
5482 /**
5483 * need 4 byte alignment
5484 * units: units
5485 * offset 4230
5486 */
5487 uint8_t alignmentFill_at_4230[2] = {};
5488 /**
5489 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
5490 * units: deg
5491 * offset 4232
5492 */
5494 /**
5495 * units: SPECIAL_CASE_SPEED
5496 * offset 4236
5497 */
5499 /**
5500 * need 4 byte alignment
5501 * units: units
5502 * offset 4238
5503 */
5504 uint8_t alignmentFill_at_4238[2] = {};
5505 /**
5506 * Exponential Average Alpha filtering parameter
5507 * offset 4240
5508 */
5510 /**
5511 * How often do we update fuel level gauge
5512 * units: seconds
5513 * offset 4244
5514 */
5516 /**
5517 * Error below specified value
5518 * units: v
5519 * offset 4248
5520 */
5522 /**
5523 * Error above specified value
5524 * units: v
5525 * offset 4252
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 4256
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 4260
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 4261
5544 */
5545 scaled_channel<uint8_t, 10, 1> maxOilPressureTimeout;
5546 /**
5547 * units: kg/h
5548 * offset 4262
5549 */
5550 scaled_channel<uint16_t, 100, 1> idleFlowEstimateFlow[8] = {};
5551 /**
5552 * units: %
5553 * offset 4278
5554 */
5555 scaled_channel<uint8_t, 2, 1> idleFlowEstimatePosition[8] = {};
5556 /**
5557 * units: mg
5558 * offset 4286
5559 */
5560 int8_t airmassToTimingBins[8] = {};
5561 /**
5562 * units: deg
5563 * offset 4294
5564 */
5565 int8_t airmassToTimingValues[8] = {};
5566 /**
5567 * idle return target ramp duration
5568 * units: seconds
5569 * offset 4302
5570 */
5571 scaled_channel<uint8_t, 10, 1> idleReturnTargetRampDuration;
5572 /**
5573 * need 4 byte alignment
5574 * units: units
5575 * offset 4303
5576 */
5577 uint8_t alignmentFill_at_4303[1] = {};
5578 /**
5579 * Voltage when the wastegate is fully open
5580 * units: v
5581 * offset 4304
5582 */
5584 /**
5585 * Voltage when the wastegate is closed
5586 * units: v
5587 * offset 4308
5588 */
5590 /**
5591 * offset 4312
5592 */
5593 wbo_s canWbo[CAN_WBO_COUNT] = {};
5594 /**
5595 * offset 4328
5596 */
5598 /**
5599 * offset 4330
5600 */
5602 /**
5603 * need 4 byte alignment
5604 * units: units
5605 * offset 4331
5606 */
5607 uint8_t alignmentFill_at_4331[1] = {};
5608 /**
5609 * offset 4332
5610 */
5612};
5613static_assert(sizeof(engine_configuration_s) == 4356);
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 4356
5683 */
5684 float tmfTable[TMF_RATIO_SIZE][TMF_SIZE] = {};
5685 /**
5686 * offset 4388
5687 */
5688 float tmfRatioBins[TMF_RATIO_SIZE] = {};
5689 /**
5690 * offset 4404
5691 */
5692 float tmfOpeningBins[TMF_SIZE] = {};
5693 /**
5694 * units: Nm
5695 * offset 4412
5696 */
5697 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE] = {};
5698 /**
5699 * units: RPM
5700 * offset 4460
5701 */
5702 uint16_t torqueRpmBins[TORQUE_CURVE_RPM_SIZE] = {};
5703 /**
5704 * units: Load
5705 * offset 4476
5706 */
5707 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
5708 /**
5709 * units: mult
5710 * offset 4488
5711 */
5712 float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT] = {};
5713 /**
5714 * units: count
5715 * offset 4680
5716 */
5717 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
5718 /**
5719 * units: SPECIAL_CASE_TEMPERATURE
5720 * offset 4692
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 4708
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 4740
5734 */
5735 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5736 /**
5737 * target Wastegate value, 0 to 100%
5738 * units: target DC position
5739 * offset 4772
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 4780
5746 */
5747 scaled_channel<int16_t, 100, 1> dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5748 /**
5749 * units: %
5750 * offset 4796
5751 */
5752 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
5753 /**
5754 * units: Load
5755 * offset 4860
5756 */
5757 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
5758 /**
5759 * units: RPM
5760 * offset 4868
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 4876
5767 */
5768 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
5769 /**
5770 * units: ms
5771 * offset 4892
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 4908
5778 */
5779 scaled_channel<int16_t, 1, 1> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
5780 /**
5781 * See idleRpmPid
5782 * units: RPM
5783 * offset 4940
5784 */
5785 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
5786 /**
5787 * units: deg
5788 * offset 4956
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 5006
5795 */
5796 scaled_channel<int16_t, 1, 1> ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE] = {};
5797 /**
5798 * units: Load
5799 * offset 5016
5800 */
5801 scaled_channel<uint8_t, 1, 5> ignitionCltCorrLoadBins[CLT_TIMING_CURVE_SIZE] = {};
5802 /**
5803 * need 4 byte alignment
5804 * units: units
5805 * offset 5021
5806 */
5807 uint8_t alignmentFill_at_5021[3] = {};
5808 /**
5809 * units: x
5810 * offset 5024
5811 */
5812 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
5813 /**
5814 * units: y
5815 * offset 5088
5816 */
5817 float scriptCurve1[SCRIPT_CURVE_16] = {};
5818 /**
5819 * units: x
5820 * offset 5152
5821 */
5822 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
5823 /**
5824 * units: y
5825 * offset 5216
5826 */
5827 float scriptCurve2[SCRIPT_CURVE_16] = {};
5828 /**
5829 * units: x
5830 * offset 5280
5831 */
5832 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
5833 /**
5834 * units: y
5835 * offset 5312
5836 */
5837 float scriptCurve3[SCRIPT_CURVE_8] = {};
5838 /**
5839 * units: x
5840 * offset 5344
5841 */
5842 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
5843 /**
5844 * units: y
5845 * offset 5376
5846 */
5847 float scriptCurve4[SCRIPT_CURVE_8] = {};
5848 /**
5849 * units: x
5850 * offset 5408
5851 */
5852 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
5853 /**
5854 * units: y
5855 * offset 5440
5856 */
5857 float scriptCurve5[SCRIPT_CURVE_8] = {};
5858 /**
5859 * units: x
5860 * offset 5472
5861 */
5862 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
5863 /**
5864 * units: y
5865 * offset 5504
5866 */
5867 float scriptCurve6[SCRIPT_CURVE_8] = {};
5868 /**
5869 * units: SPECIAL_CASE_PRESSURE
5870 * offset 5536
5871 */
5872 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
5873 /**
5874 * units: RPM
5875 * offset 5552
5876 */
5877 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
5878 /**
5879 * units: ratio
5880 * offset 5568
5881 */
5882 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
5883 /**
5884 * Cranking fuel correction coefficient based on TPS
5885 * units: Ratio
5886 * offset 5632
5887 */
5888 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
5889 /**
5890 * units: %
5891 * offset 5664
5892 */
5893 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
5894 /**
5895 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5896 * units: RPM
5897 * offset 5696
5898 */
5899 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
5900 /**
5901 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5902 * units: deg
5903 * offset 5704
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 5712
5910 */
5911 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
5912 /**
5913 * RPM-based idle position for coasting
5914 * units: %
5915 * offset 5728
5916 */
5917 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
5918 /**
5919 * offset 5744
5920 */
5921 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5922 /**
5923 * units: RPM
5924 * offset 5776
5925 */
5926 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
5927 /**
5928 * offset 5784
5929 */
5930 uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT] = {};
5931 /**
5932 * offset 5792
5933 */
5934 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5935 /**
5936 * offset 5824
5937 */
5938 uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT] = {};
5939 /**
5940 * units: %
5941 * offset 5832
5942 */
5943 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE] = {};
5944 /**
5945 * units: %
5946 * offset 5892
5947 */
5948 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
5949 /**
5950 * units: RPM
5951 * offset 5902
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 5908
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 5940
5964 */
5965 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
5966 /**
5967 * units: SPECIAL_CASE_TEMPERATURE
5968 * offset 5972
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 5996
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 6008
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 6016
5988 */
5989 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
5990 /**
5991 * units: RPM
5992 * offset 6048
5993 */
5994 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE_RPM] = {};
5995 /**
5996 * units: load
5997 * offset 6054
5998 */
5999 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
6000 /**
6001 * units: %
6002 * offset 6058
6003 */
6004 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE_RPM] = {};
6005 /**
6006 * offset 6106
6007 */
6009 /**
6010 * need 4 byte alignment
6011 * units: units
6012 * offset 14106
6013 */
6014 uint8_t alignmentFill_at_14106[2] = {};
6015 /**
6016 * units: SPECIAL_CASE_TEMPERATURE
6017 * offset 14108
6018 */
6019 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
6020 /**
6021 * units: ratio
6022 * offset 14172
6023 */
6024 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
6025 /**
6026 * units: SPECIAL_CASE_TEMPERATURE
6027 * offset 14236
6028 */
6029 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
6030 /**
6031 * units: ratio
6032 * offset 14300
6033 */
6034 float iatFuelCorr[IAT_CURVE_SIZE] = {};
6035 /**
6036 * units: ratio
6037 * offset 14364
6038 */
6039 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
6040 /**
6041 * units: SPECIAL_CASE_TEMPERATURE
6042 * offset 14396
6043 */
6044 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
6045 /**
6046 * units: counter
6047 * offset 14428
6048 */
6049 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
6050 /**
6051 * units: SPECIAL_CASE_TEMPERATURE
6052 * offset 14460
6053 */
6054 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
6055 /**
6056 * 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.
6057 * A reasonable starting point is 60mg per liter per cylinder.
6058 * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
6059 * units: mg
6060 * offset 14468
6061 */
6062 float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
6063 /**
6064 * CLT-based idle position for simple manual idle controller
6065 * units: SPECIAL_CASE_TEMPERATURE
6066 * offset 14596
6067 */
6068 float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE] = {};
6069 /**
6070 * CLT-based idle position for simple manual idle controller
6071 * units: %
6072 * offset 14628
6073 */
6074 float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE] = {};
6075 /**
6076 * units: Target RPM
6077 * offset 14692
6078 */
6079 scaled_channel<uint8_t, 1, 100> rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE] = {};
6080 /**
6081 * Long Term Idle Trim (LTIT) multiplicativo para idle open loop
6082 * units: %
6083 * offset 14694
6084 */
6085 scaled_channel<uint16_t, 10, 1> ltitTable[CLT_IDLE_TABLE_CLT_SIZE] = {};
6086 /**
6087 * need 4 byte alignment
6088 * units: units
6089 * offset 14710
6090 */
6091 uint8_t alignmentFill_at_14710[2] = {};
6092 /**
6093 * Also known as MAF transfer function.
6094 * kg/hour value.
6095 * By the way 2.081989116 kg/h = 1 ft3/m
6096 * units: kg/hour
6097 * offset 14712
6098 */
6099 float mafDecoding[MAF_DECODING_COUNT] = {};
6100 /**
6101 * units: V
6102 * offset 14840
6103 */
6104 float mafDecodingBins[MAF_DECODING_COUNT] = {};
6105 /**
6106 * units: deg
6107 * offset 14968
6108 */
6109 scaled_channel<int16_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_COUNT] = {};
6110 /**
6111 * units: SPECIAL_CASE_TEMPERATURE
6112 * offset 15032
6113 */
6114 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_COUNT] = {};
6115 /**
6116 * units: Load
6117 * offset 15040
6118 */
6119 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT] = {};
6120 /**
6121 * units: deg
6122 * offset 15044
6123 */
6124 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
6125 /**
6126 * units: Load
6127 * offset 15300
6128 */
6129 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
6130 /**
6131 * units: RPM
6132 * offset 15332
6133 */
6134 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
6135 /**
6136 * units: onoff
6137 * offset 15348
6138 */
6139 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
6140 /**
6141 * 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.
6142 * 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.
6143 * Additionally, you can also use MLV to get the map values and/or generate the table for you
6144 * units: SPECIAL_CASE_PRESSURE
6145 * offset 15408
6146 */
6147 scaled_channel<uint16_t, 100, 1> mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT] = {};
6148 /**
6149 * units: % TPS
6150 * offset 15984
6151 */
6152 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[MAP_EST_LOAD_COUNT] = {};
6153 /**
6154 * units: RPM
6155 * offset 16020
6156 */
6157 uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT] = {};
6158 /**
6159 * units: value
6160 * offset 16052
6161 */
6162 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6163 /**
6164 * units: L
6165 * offset 16058
6166 */
6167 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
6168 /**
6169 * units: RPM
6170 * offset 16062
6171 */
6172 uint16_t vvtTable1RpmBins[VVT_TABLE_RPM_SIZE] = {};
6173 /**
6174 * units: value
6175 * offset 16068
6176 */
6177 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6178 /**
6179 * units: L
6180 * offset 16074
6181 */
6182 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
6183 /**
6184 * units: RPM
6185 * offset 16078
6186 */
6187 uint16_t vvtTable2RpmBins[VVT_TABLE_RPM_SIZE] = {};
6188 /**
6189 * units: deg
6190 * offset 16084
6191 */
6192 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
6193 /**
6194 * units: Load
6195 * offset 16324
6196 */
6197 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
6198 /**
6199 * units: RPM
6200 * offset 16348
6201 */
6202 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
6203 /**
6204 * units: %
6205 * offset 16368
6206 */
6207 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
6208 /**
6209 * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
6210 * offset 16608
6211 */
6212 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
6213 /**
6214 * units: RPM
6215 * offset 16632
6216 */
6217 uint16_t veRpmBins[VE_RPM_COUNT] = {};
6218 /**
6219 * units: lambda
6220 * offset 16652
6221 */
6222 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
6223 /**
6224 * offset 16940
6225 */
6226 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
6227 /**
6228 * units: RPM
6229 * offset 16976
6230 */
6231 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
6232 /**
6233 * units: value
6234 * offset 17008
6235 */
6236 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
6237 /**
6238 * units: %
6239 * offset 17264
6240 */
6241 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6242 /**
6243 * units: %
6244 * offset 17296
6245 */
6246 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6247 /**
6248 * units: value
6249 * offset 17328
6250 */
6251 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
6252 /**
6253 * units: L
6254 * offset 17584
6255 */
6256 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
6257 /**
6258 * units: RPM
6259 * offset 17600
6260 */
6261 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
6262 /**
6263 * units: value
6264 * offset 17616
6265 */
6266 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
6267 /**
6268 * units: L
6269 * offset 18000
6270 */
6271 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
6272 /**
6273 * units: RPM
6274 * offset 18024
6275 */
6276 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
6277 /**
6278 * units: value
6279 * offset 18040
6280 */
6281 uint8_t scriptTable3[TABLE_3_LOAD_SIZE][TABLE_3_RPM_SIZE] = {};
6282 /**
6283 * units: L
6284 * offset 18052
6285 */
6286 int16_t scriptTable3LoadBins[TABLE_3_LOAD_SIZE] = {};
6287 /**
6288 * units: RPM
6289 * offset 18058
6290 */
6291 int16_t scriptTable3RpmBins[TABLE_3_RPM_SIZE] = {};
6292 /**
6293 * units: value
6294 * offset 18066
6295 */
6296 uint8_t scriptTable4[TABLE_4_LOAD_SIZE][TABLE_4_RPM_SIZE] = {};
6297 /**
6298 * units: L
6299 * offset 18086
6300 */
6301 int16_t scriptTable4LoadBins[TABLE_4_LOAD_SIZE] = {};
6302 /**
6303 * units: RPM
6304 * offset 18096
6305 */
6306 int16_t scriptTable4RpmBins[TABLE_4_RPM_SIZE] = {};
6307 /**
6308 * offset 18104
6309 */
6310 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
6311 /**
6312 * units: rpm
6313 * offset 18112
6314 */
6315 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
6316 /**
6317 * offset 18120
6318 */
6319 ign_cyl_trim_s ignTrims[MAX_CYLINDER_COUNT] = {};
6320 /**
6321 * offset 18312
6322 */
6323 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
6324 /**
6325 * units: rpm
6326 * offset 18320
6327 */
6328 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
6329 /**
6330 * offset 18328
6331 */
6332 fuel_cyl_trim_s fuelTrims[MAX_CYLINDER_COUNT] = {};
6333 /**
6334 * units: ratio
6335 * offset 18520
6336 */
6337 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
6338 /**
6339 * units: Airmass
6340 * offset 18536
6341 */
6342 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
6343 /**
6344 * units: %
6345 * offset 18544
6346 */
6347 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
6348 /**
6349 * units: %
6350 * offset 18552
6351 */
6352 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
6353 /**
6354 * units: %
6355 * offset 18560
6356 */
6357 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
6358 /**
6359 * units: %
6360 * offset 18568
6361 */
6362 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
6363 /**
6364 * units: %
6365 * offset 18576
6366 */
6367 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
6368 /**
6369 * units: %
6370 * offset 18584
6371 */
6372 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
6373 /**
6374 * units: %
6375 * offset 18592
6376 */
6377 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
6378 /**
6379 * units: %
6380 * offset 18600
6381 */
6382 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
6383 /**
6384 * units: %
6385 * offset 18608
6386 */
6387 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
6388 /**
6389 * units: %
6390 * offset 18616
6391 */
6392 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
6393 /**
6394 * units: %
6395 * offset 18624
6396 */
6397 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
6398 /**
6399 * units: %
6400 * offset 18632
6401 */
6402 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
6403 /**
6404 * units: TPS
6405 * offset 18640
6406 */
6407 uint8_t tcu_tccTpsBins[8] = {};
6408 /**
6409 * units: SPECIAL_CASE_SPEED
6410 * offset 18648
6411 */
6412 uint8_t tcu_tccLockSpeed[8] = {};
6413 /**
6414 * units: SPECIAL_CASE_SPEED
6415 * offset 18656
6416 */
6417 uint8_t tcu_tccUnlockSpeed[8] = {};
6418 /**
6419 * units: SPECIAL_CASE_SPEED
6420 * offset 18664
6421 */
6422 uint8_t tcu_32SpeedBins[8] = {};
6423 /**
6424 * units: %
6425 * offset 18672
6426 */
6427 uint8_t tcu_32Vals[8] = {};
6428 /**
6429 * units: %
6430 * offset 18680
6431 */
6432 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_RPM_SIZE] = {};
6433 /**
6434 * units: %
6435 * offset 18728
6436 */
6437 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
6438 /**
6439 * units: RPM
6440 * offset 18734
6441 */
6442 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_RPM_SIZE] = {};
6443 /**
6444 * units: deg
6445 * offset 18742
6446 */
6447 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_RPM_SIZE] = {};
6448 /**
6449 * units: %
6450 * offset 18790
6451 */
6452 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
6453 /**
6454 * units: RPM
6455 * offset 18796
6456 */
6457 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_RPM_SIZE] = {};
6458 /**
6459 * units: deg
6460 * offset 18804
6461 */
6462 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6463 /**
6464 * units: TPS
6465 * offset 18844
6466 */
6467 uint16_t alsIgnRetardLoadBins[ALS_SIZE] = {};
6468 /**
6469 * units: RPM
6470 * offset 18852
6471 */
6472 uint16_t alsIgnRetardrpmBins[ALS_RPM_SIZE] = {};
6473 /**
6474 * units: percent
6475 * offset 18862
6476 */
6477 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[ALS_SIZE][ALS_RPM_SIZE] = {};
6478 /**
6479 * units: TPS
6480 * offset 18902
6481 */
6482 uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE] = {};
6483 /**
6484 * units: RPM
6485 * offset 18910
6486 */
6487 uint16_t alsFuelAdjustmentrpmBins[ALS_RPM_SIZE] = {};
6488 /**
6489 * units: ratio
6490 * offset 18920
6491 */
6492 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6493 /**
6494 * units: TPS
6495 * offset 18960
6496 */
6497 uint16_t alsIgnSkipLoadBins[ALS_SIZE] = {};
6498 /**
6499 * units: RPM
6500 * offset 18968
6501 */
6502 uint16_t alsIgnSkiprpmBins[ALS_RPM_SIZE] = {};
6503 /**
6504 * need 4 byte alignment
6505 * units: units
6506 * offset 18978
6507 */
6508 uint8_t alignmentFill_at_18978[2] = {};
6509 /**
6510 * offset 18980
6511 */
6512 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
6513 /**
6514 * offset 19732
6515 */
6516 blend_table_s veBlends[VE_BLEND_COUNT] = {};
6517 /**
6518 * units: %
6519 * offset 20484
6520 */
6521 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[THR_EST_SIZE] = {};
6522 /**
6523 * In units of g/s normalized to choked flow conditions
6524 * units: g/s
6525 * offset 20508
6526 */
6527 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[THR_EST_SIZE] = {};
6528 /**
6529 * offset 20532
6530 */
6531 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
6532 /**
6533 * offset 20908
6534 */
6535 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
6536 /**
6537 * units: level
6538 * offset 21284
6539 */
6540 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
6541 /**
6542 * units: level
6543 * offset 21308
6544 */
6545 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
6546 /**
6547 * units: level
6548 * offset 21332
6549 */
6550 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
6551 /**
6552 * units: level
6553 * offset 21356
6554 */
6555 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
6556 /**
6557 * units: level
6558 * offset 21380
6559 */
6560 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
6561 /**
6562 * units: level
6563 * offset 21404
6564 */
6565 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
6566 /**
6567 * units: level
6568 * offset 21428
6569 */
6570 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
6571 /**
6572 * units: level
6573 * offset 21452
6574 */
6575 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
6576 /**
6577 * units: level
6578 * offset 21476
6579 */
6580 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
6581 /**
6582 * units: level
6583 * offset 21500
6584 */
6585 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
6586 /**
6587 * units: level
6588 * offset 21524
6589 */
6590 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
6591 /**
6592 * units: lambda
6593 * offset 21548
6594 */
6595 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[LAM_SIZE][LAM_RPM_SIZE] = {};
6596 /**
6597 * offset 21560
6598 */
6599 uint16_t lambdaMaxDeviationLoadBins[LAM_SIZE] = {};
6600 /**
6601 * units: RPM
6602 * offset 21568
6603 */
6604 uint16_t lambdaMaxDeviationRpmBins[LAM_RPM_SIZE] = {};
6605 /**
6606 * units: %
6607 * offset 21574
6608 */
6609 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_RPM_SIZE] = {};
6610 /**
6611 * offset 21622
6612 */
6613 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
6614 /**
6615 * units: RPM
6616 * offset 21634
6617 */
6618 uint16_t injectorStagingRpmBins[INJ_STAGING_RPM_SIZE] = {};
6619 /**
6620 * units: SPECIAL_CASE_TEMPERATURE
6621 * offset 21650
6622 */
6623 int16_t wwCltBins[WWAE_TABLE_SIZE] = {};
6624 /**
6625 * offset 21666
6626 */
6627 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
6628 /**
6629 * offset 21674
6630 */
6631 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
6632 /**
6633 * units: SPECIAL_CASE_PRESSURE
6634 * offset 21682
6635 */
6636 uint8_t wwMapBins[WWAE_TABLE_SIZE] = {};
6637 /**
6638 * offset 21690
6639 */
6640 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
6641 /**
6642 * offset 21698
6643 */
6644 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
6645 /**
6646 * units: %
6647 * offset 21706
6648 */
6649 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
6650 /**
6651 * units: deg
6652 * offset 21722
6653 */
6654 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
6655 /**
6656 * units: volts
6657 * offset 21738
6658 */
6659 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
6660 /**
6661 * units: ms
6662 * offset 21746
6663 */
6664 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
6665 /**
6666 * units: kPa
6667 * offset 21762
6668 */
6669 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
6670 /**
6671 * units: load
6672 * offset 21962
6673 */
6674 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
6675 /**
6676 * units: RPM
6677 * offset 21982
6678 */
6679 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
6680 /**
6681 * units: %
6682 * offset 21992
6683 */
6684 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_RPM_SIZE] = {};
6685 /**
6686 * units: cc/lobe
6687 * offset 22112
6688 */
6689 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
6690 /**
6691 * units: RPM
6692 * offset 22132
6693 */
6694 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_RPM_SIZE] = {};
6695 /**
6696 * units: %
6697 * offset 22144
6698 */
6699 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6700 /**
6701 * units: fuel mass/mg
6702 * offset 22272
6703 */
6704 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6705 /**
6706 * units: bar
6707 * offset 22288
6708 */
6709 scaled_channel<uint16_t, 10, 1> hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6710 /**
6711 * units: ms
6712 * offset 22304
6713 */
6714 scaled_channel<uint16_t, 100, 1> injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE] = {};
6715 /**
6716 * units: fuel mass/mg
6717 * offset 22316
6718 */
6719 scaled_channel<uint16_t, 100, 1> injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE] = {};
6720 /**
6721 * units: bar
6722 * offset 22320
6723 */
6724 scaled_channel<uint16_t, 10, 1> injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE] = {};
6725 /**
6726 * units: RPM
6727 * offset 22326
6728 */
6729 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
6730 /**
6731 * Knock sensor output knock detection threshold depending on current RPM.
6732 * units: dB
6733 * offset 22358
6734 */
6735 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
6736 /**
6737 * units: RPM
6738 * offset 22374
6739 */
6740 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6741 /**
6742 * units: multiplier
6743 * offset 22378
6744 */
6745 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6746 /**
6747 * units: RPM
6748 * offset 22382
6749 */
6750 scaled_channel<uint8_t, 1, 50> predictiveMapBlendDurationBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6751 /**
6752 * units: second
6753 * offset 22386
6754 */
6755 scaled_channel<uint8_t, 50, 1> predictiveMapBlendDurationValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6756 /**
6757 * units: SPECIAL_CASE_TEMPERATURE
6758 * offset 22390
6759 */
6760 scaled_channel<int16_t, 1, 1> cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
6761 /**
6762 * units: RPM
6763 * offset 22398
6764 */
6765 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
6766 /**
6767 * units: volt
6768 * offset 22406
6769 */
6770 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
6771 /**
6772 * units: %
6773 * offset 22422
6774 */
6775 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
6776 /**
6777 * units: volts
6778 * offset 22430
6779 */
6780 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
6781 /**
6782 * units: multiplier
6783 * offset 22438
6784 */
6785 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
6786 /**
6787 * units: %
6788 * offset 22446
6789 */
6790 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
6791 /**
6792 * units: SPECIAL_CASE_SPEED
6793 * offset 22454
6794 */
6795 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
6796 /**
6797 * units: SPECIAL_CASE_SPEED
6798 * offset 22462
6799 */
6800 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
6801 /**
6802 * units: SPECIAL_CASE_SPEED
6803 * offset 22470
6804 */
6805 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
6806 /**
6807 * units: SPECIAL_CASE_SPEED
6808 * offset 22478
6809 */
6810 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
6811 /**
6812 * units: SPECIAL_CASE_SPEED
6813 * offset 22486
6814 */
6815 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
6816 /**
6817 * units: SPECIAL_CASE_SPEED
6818 * offset 22494
6819 */
6820 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
6821 /**
6822 * need 4 byte alignment
6823 * units: units
6824 * offset 22502
6825 */
6826 uint8_t alignmentFill_at_22502[2] = {};
6827 /**
6828 * units: ms
6829 * offset 22504
6830 */
6831 float tcu_shiftTime;
6832 /**
6833 * units: volts
6834 * offset 22508
6835 */
6836 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
6837 /**
6838 * units: Load
6839 * offset 22556
6840 */
6841 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6842 /**
6843 * units: RPM
6844 * offset 22564
6845 */
6846 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
6847 /**
6848 * units: C
6849 * offset 22576
6850 */
6851 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
6852 /**
6853 * units: ratio
6854 * offset 22596
6855 */
6856 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
6857 /**
6858 * units: C
6859 * offset 22616
6860 */
6861 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
6862 /**
6863 * units: ratio
6864 * offset 22636
6865 */
6866 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
6867 /**
6868 * units: C
6869 * offset 22656
6870 */
6871 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
6872 /**
6873 * offset 22676
6874 */
6875 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
6876 /**
6877 * units: C
6878 * offset 22696
6879 */
6880 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
6881 /**
6882 * offset 22716
6883 */
6884 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
6885 /**
6886 * units: RPM
6887 * offset 22736
6888 */
6889 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
6890 /**
6891 * units: SPECIAL_CASE_PRESSURE
6892 * offset 22744
6893 */
6894 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
6895 /**
6896 * offset 22752
6897 */
6898 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
6899 /**
6900 * @@DYNO_RPM_STEP_TOOLTIP@@
6901 * units: Rpm
6902 * offset 23128
6903 */
6904 scaled_channel<uint8_t, 1, 1> dynoRpmStep;
6905 /**
6906 * @@DYNO_SAE_TEMPERATURE_C_TOOLTIP@@
6907 * units: C
6908 * offset 23129
6909 */
6910 scaled_channel<int8_t, 1, 1> dynoSaeTemperatureC;
6911 /**
6912 * @@DYNO_SAE_RELATIVE_HUMIDITY_TOOLTIP@@
6913 * units: %
6914 * offset 23130
6915 */
6916 scaled_channel<uint8_t, 1, 1> dynoSaeRelativeHumidity;
6917 /**
6918 * need 4 byte alignment
6919 * units: units
6920 * offset 23131
6921 */
6922 uint8_t alignmentFill_at_23131[1] = {};
6923 /**
6924 * @@DYNO_SAE_BARO_TOOLTIP@@
6925 * units: KPa
6926 * offset 23132
6927 */
6928 scaled_channel<float, 1, 1> dynoSaeBaro;
6929 /**
6930 * @@DYNO_CAR_WHEEL_DIA_INCH_TOOLTIP@@
6931 * units: Inch
6932 * offset 23136
6933 */
6934 scaled_channel<int8_t, 1, 1> dynoCarWheelDiaInch;
6935 /**
6936 * @@DYNO_CAR_WHEEL_ASPECT_RATIO_TOOLTIP@@
6937 * units: Aspect Ratio (height)
6938 * offset 23137
6939 */
6940 scaled_channel<int8_t, 1, 1> dynoCarWheelAspectRatio;
6941 /**
6942 * @@DYNO_CAR_WHEEL_TIRE_WIDTH_TOOLTIP@@
6943 * units: Width mm
6944 * offset 23138
6945 */
6946 scaled_channel<int16_t, 1, 1> dynoCarWheelTireWidthMm;
6947 /**
6948 * @@DYNO_CAR_GEAR_PRIMARY_REDUCTION_TOOLTIP@@
6949 * units: Units
6950 * offset 23140
6951 */
6952 scaled_channel<float, 1, 1> dynoCarGearPrimaryReduction;
6953 /**
6954 * @@DYNO_CAR_GEAR_RATIO_TOOLTIP@@
6955 * units: Units
6956 * offset 23144
6957 */
6958 scaled_channel<float, 1, 1> dynoCarGearRatio;
6959 /**
6960 * @@DYNO_CAR_GEAR_FINAL_DRIVE_TOOLTIP@@
6961 * units: Units
6962 * offset 23148
6963 */
6964 scaled_channel<float, 1, 1> dynoCarGearFinalDrive;
6965 /**
6966 * @@DYNO_CAR_CAR_MASS_TOOLTIP@@
6967 * units: Kg
6968 * offset 23152
6969 */
6970 scaled_channel<int16_t, 1, 1> dynoCarCarMassKg;
6971 /**
6972 * @@DYNO_CAR_CARGO_MASS_TOOLTIP@@
6973 * units: Kg
6974 * offset 23154
6975 */
6976 scaled_channel<int16_t, 1, 1> dynoCarCargoMassKg;
6977 /**
6978 * @@DYNO_CAR_COEFF_OF_DRAG_TOOLTIP@@
6979 * units: Coeff
6980 * offset 23156
6981 */
6982 scaled_channel<float, 1, 1> dynoCarCoeffOfDrag;
6983 /**
6984 * @@DYNO_CAR_FRONTAL_AREA_TOOLTIP@@
6985 * units: m2
6986 * offset 23160
6987 */
6988 scaled_channel<float, 1, 1> dynoCarFrontalAreaM2;
6989 /**
6990 * units: deg
6991 * offset 23164
6992 */
6993 scaled_channel<int8_t, 10, 1> trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_RPM_SIZE] = {};
6994 /**
6995 * units: rpm
6996 * offset 23179
6997 */
6998 scaled_channel<uint8_t, 1, 50> trailingSparkRpmBins[TRAILING_SPARK_RPM_SIZE] = {};
6999 /**
7000 * units: Load
7001 * offset 23182
7002 */
7003 scaled_channel<uint8_t, 1, 5> trailingSparkLoadBins[TRAILING_SPARK_SIZE] = {};
7004 /**
7005 * units: RPM
7006 * offset 23187
7007 */
7008 scaled_channel<uint8_t, 1, 100> maximumOilPressureBins[4] = {};
7009 /**
7010 * units: SPECIAL_CASE_PRESSURE
7011 * offset 23191
7012 */
7013 scaled_channel<uint8_t, 1, 10> maximumOilPressureValues[4] = {};
7014 /**
7015 * Selects the X axis to use for the table.
7016 * offset 23195
7017 */
7019 /**
7020 * How many % of ignition events will be cut
7021 * units: %
7022 * offset 23196
7023 */
7024 int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7025 /**
7026 * offset 23268
7027 */
7028 int16_t torqueReductionCutXBins[TORQUE_TABLE_X_SIZE] = {};
7029 /**
7030 * units: gear N°
7031 * offset 23286
7032 */
7033 int8_t torqueReductionCutGearBins[TORQUE_TABLE_Y_SIZE] = {};
7034 /**
7035 * Selects the X axis to use for the table.
7036 * offset 23294
7037 */
7039 /**
7040 * need 4 byte alignment
7041 * units: units
7042 * offset 23295
7043 */
7044 uint8_t alignmentFill_at_23295[1] = {};
7045 /**
7046 * 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
7047 * units: ms
7048 * offset 23296
7049 */
7050 float torqueReductionTimeTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7051 /**
7052 * offset 23584
7053 */
7054 int16_t torqueReductionTimeXBins[TORQUE_TABLE_X_SIZE] = {};
7055 /**
7056 * units: gear N°
7057 * offset 23602
7058 */
7059 int8_t torqueReductionTimeGearBins[TORQUE_TABLE_Y_SIZE] = {};
7060 /**
7061 * Selects the X axis to use for the table.
7062 * offset 23610
7063 */
7065 /**
7066 * need 4 byte alignment
7067 * units: units
7068 * offset 23611
7069 */
7070 uint8_t alignmentFill_at_23611[1] = {};
7071 /**
7072 * How many degrees of timing advance will be reduced during the Torque Reduction Time
7073 * units: deg
7074 * offset 23612
7075 */
7076 float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7077 /**
7078 * offset 23900
7079 */
7080 int16_t torqueReductionIgnitionRetardXBins[TORQUE_TABLE_X_SIZE] = {};
7081 /**
7082 * units: gear N°
7083 * offset 23918
7084 */
7085 int8_t torqueReductionIgnitionRetardGearBins[TORQUE_TABLE_Y_SIZE] = {};
7086 /**
7087 * need 4 byte alignment
7088 * units: units
7089 * offset 23926
7090 */
7091 uint8_t alignmentFill_at_23926[2] = {};
7092};
7093static_assert(sizeof(persistent_config_s) == 23928);
7094
7095// end
7096// 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