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