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