rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_uaefi_pro_h7.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: {bitStringValue(unitsLabels, useMetricOnInterface)}
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: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
390 * offset 0
391 */
392 float lowValue;
393 /**
394 * kPa/psi value at high volts
395 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
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: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
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 28
566 */
567 scaled_channel<int16_t, 100, 1> battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE] = {};
568};
569static_assert(sizeof(injector_s) == 60);
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: {bitStringValue(unitsLabels, useMetricOnInterface)}
851 * offset 12
852 */
853 int16_t minimumClt;
854 /**
855 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
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 * need 4 byte alignment
1283 * units: units
1284 * offset 10
1285 */
1286 uint8_t alignmentFill_at_10[2] = {};
1287 /**
1288 * Enable LTIT (Long Term Idle Trim) learning
1289 offset 12 bit 0 */
1290 bool ltitEnabled : 1 {};
1291 /**
1292 offset 12 bit 1 */
1293 bool useMetricOnInterface : 1 {};
1294 /**
1295 offset 12 bit 2 */
1296 bool useLambdaOnInterface : 1 {};
1297 /**
1298 offset 12 bit 3 */
1299 bool unusedBit_9_3 : 1 {};
1300 /**
1301 offset 12 bit 4 */
1302 bool unusedBit_9_4 : 1 {};
1303 /**
1304 offset 12 bit 5 */
1305 bool unusedBit_9_5 : 1 {};
1306 /**
1307 offset 12 bit 6 */
1308 bool unusedBit_9_6 : 1 {};
1309 /**
1310 offset 12 bit 7 */
1311 bool unusedBit_9_7 : 1 {};
1312 /**
1313 offset 12 bit 8 */
1314 bool unusedBit_9_8 : 1 {};
1315 /**
1316 offset 12 bit 9 */
1317 bool unusedBit_9_9 : 1 {};
1318 /**
1319 offset 12 bit 10 */
1320 bool unusedBit_9_10 : 1 {};
1321 /**
1322 offset 12 bit 11 */
1323 bool unusedBit_9_11 : 1 {};
1324 /**
1325 offset 12 bit 12 */
1326 bool unusedBit_9_12 : 1 {};
1327 /**
1328 offset 12 bit 13 */
1329 bool unusedBit_9_13 : 1 {};
1330 /**
1331 offset 12 bit 14 */
1332 bool unusedBit_9_14 : 1 {};
1333 /**
1334 offset 12 bit 15 */
1335 bool unusedBit_9_15 : 1 {};
1336 /**
1337 offset 12 bit 16 */
1338 bool unusedBit_9_16 : 1 {};
1339 /**
1340 offset 12 bit 17 */
1341 bool unusedBit_9_17 : 1 {};
1342 /**
1343 offset 12 bit 18 */
1344 bool unusedBit_9_18 : 1 {};
1345 /**
1346 offset 12 bit 19 */
1347 bool unusedBit_9_19 : 1 {};
1348 /**
1349 offset 12 bit 20 */
1350 bool unusedBit_9_20 : 1 {};
1351 /**
1352 offset 12 bit 21 */
1353 bool unusedBit_9_21 : 1 {};
1354 /**
1355 offset 12 bit 22 */
1356 bool unusedBit_9_22 : 1 {};
1357 /**
1358 offset 12 bit 23 */
1359 bool unusedBit_9_23 : 1 {};
1360 /**
1361 offset 12 bit 24 */
1362 bool unusedBit_9_24 : 1 {};
1363 /**
1364 offset 12 bit 25 */
1365 bool unusedBit_9_25 : 1 {};
1366 /**
1367 offset 12 bit 26 */
1368 bool unusedBit_9_26 : 1 {};
1369 /**
1370 offset 12 bit 27 */
1371 bool unusedBit_9_27 : 1 {};
1372 /**
1373 offset 12 bit 28 */
1374 bool unusedBit_9_28 : 1 {};
1375 /**
1376 offset 12 bit 29 */
1377 bool unusedBit_9_29 : 1 {};
1378 /**
1379 offset 12 bit 30 */
1380 bool unusedBit_9_30 : 1 {};
1381 /**
1382 offset 12 bit 31 */
1383 bool unusedBit_9_31 : 1 {};
1384 /**
1385 * Disable multispark above this engine speed.
1386 * units: rpm
1387 * offset 16
1388 */
1389 scaled_channel<uint8_t, 1, 50> multisparkMaxRpm;
1390 /**
1391 * Above this RPM, disable AC. Set to 0 to disable check.
1392 * units: rpm
1393 * offset 17
1394 */
1395 scaled_channel<uint8_t, 1, 50> maxAcRpm;
1396 /**
1397 * Above this TPS, disable AC. Set to 0 to disable check.
1398 * units: %
1399 * offset 18
1400 */
1401 uint8_t maxAcTps;
1402 /**
1403 * need 4 byte alignment
1404 * units: units
1405 * offset 19
1406 */
1407 uint8_t alignmentFill_at_19[1] = {};
1408 /**
1409 * Above this CLT, disable AC to prevent overheating the engine. Set to 0 to disable check.
1410 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
1411 * offset 20
1412 */
1413 int16_t maxAcClt;
1414 /**
1415 * need 4 byte alignment
1416 * units: units
1417 * offset 22
1418 */
1419 uint8_t alignmentFill_at_22[2] = {};
1420 /**
1421 * Just for reference really, not taken into account by any logic at this point
1422 * units: CR
1423 * offset 24
1424 */
1425 float compressionRatio;
1426 /**
1427 * Voltage when the idle valve is closed.
1428 * You probably don't have one of these!
1429 * units: mv
1430 * offset 28
1431 */
1432 uint16_t idlePositionMin;
1433 /**
1434 * Voltage when the idle valve is open.
1435 * You probably don't have one of these!
1436 * 1 volt = 1000 units
1437 * units: mv
1438 * offset 30
1439 */
1440 uint16_t idlePositionMax;
1441 /**
1442 * EMA filter constant for LTIT (0-255)
1443 * units: 0-255
1444 * offset 32
1445 */
1446 uint8_t ltitEmaAlpha;
1447 /**
1448 * RPM range to consider stable idle
1449 * units: rpm
1450 * offset 33
1451 */
1452 uint8_t ltitStableRpmThreshold;
1453 /**
1454 * Minimum time of stable idle before learning
1455 * units: s
1456 * offset 34
1457 */
1458 uint8_t ltitStableTime;
1459 /**
1460 * LTIT learning rate
1461 * units: %/s
1462 * offset 35
1463 */
1464 uint8_t ltitCorrectionRate;
1465 /**
1466 * Delay after ignition ON before LTIT learning/application
1467 * units: s
1468 * offset 36
1469 */
1470 uint8_t ltitIgnitionOnDelay;
1471 /**
1472 * Delay after ignition OFF before LTIT save
1473 * units: s
1474 * offset 37
1475 */
1477 /**
1478 * need 4 byte alignment
1479 * units: units
1480 * offset 38
1481 */
1482 uint8_t alignmentFill_at_38[2] = {};
1483 /**
1484 * Minimum LTIT multiplicative correction value
1485 * units: %
1486 * offset 40
1487 */
1488 float ltitClampMin;
1489 /**
1490 * Maximum LTIT multiplicative correction value
1491 * units: %
1492 * offset 44
1493 */
1494 float ltitClampMax;
1495 /**
1496 * LTIT table regional smoothing intensity (0=no smoothing)
1497 * units: ratio
1498 * offset 48
1499 */
1500 scaled_channel<uint8_t, 100, 1> ltitSmoothingIntensity;
1501 /**
1502 * need 4 byte alignment
1503 * units: units
1504 * offset 49
1505 */
1506 uint8_t alignmentFill_at_49[3] = {};
1507 /**
1508 * Minimum threshold of PID integrator for LTIT correction
1509 * units: %
1510 * offset 52
1511 */
1513 /**
1514 * offset 56
1515 */
1517 /**
1518 * offset 58
1519 */
1521 /**
1522 * offset 60
1523 */
1524 Gpio canTxPin;
1525 /**
1526 * offset 62
1527 */
1528 Gpio canRxPin;
1529 /**
1530 * Pin that activates the reduction/cut for shifting. Sometimes shared with the Launch Control pin
1531 * offset 64
1532 */
1534 /**
1535 * units: %
1536 * offset 66
1537 */
1539 /**
1540 * Time after which the throttle is considered jammed.
1541 * units: sec
1542 * offset 67
1543 */
1544 scaled_channel<uint8_t, 50, 1> etbJamTimeout;
1545 /**
1546 * offset 68
1547 */
1549 /**
1550 * offset 70
1551 */
1553 /**
1554 * Additional idle % while A/C is active
1555 * units: %
1556 * offset 71
1557 */
1558 uint8_t acIdleExtraOffset;
1559 /**
1560 * 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.
1561 * units: deg
1562 * offset 72
1563 */
1565 /**
1566 * Configures the maximum number of extra sparks to fire (does not include main spark)
1567 * units: count
1568 * offset 73
1569 */
1571 /**
1572 * units: RPM
1573 * offset 74
1574 */
1575 int16_t vvtControlMinRpm;
1576 /**
1577 * offset 76
1578 */
1580 /**
1581 * offset 136
1582 */
1584 /**
1585 * Does the vehicle have a turbo or supercharger?
1586 offset 196 bit 0 */
1587 bool isForcedInduction : 1 {};
1588 /**
1589 * 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.
1590 offset 196 bit 1 */
1591 bool useFordRedundantTps : 1 {};
1592 /**
1593 offset 196 bit 2 */
1594 bool enableKline : 1 {};
1595 /**
1596 offset 196 bit 3 */
1597 bool overrideTriggerGaps : 1 {};
1598 /**
1599 * Turn on this fan when AC is on.
1600 offset 196 bit 4 */
1601 bool enableFan1WithAc : 1 {};
1602 /**
1603 * Turn on this fan when AC is on.
1604 offset 196 bit 5 */
1605 bool enableFan2WithAc : 1 {};
1606 /**
1607 * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
1608 offset 196 bit 6 */
1609 bool enableTrailingSparks : 1 {};
1610 /**
1611 * TLE7209 and L6205 use two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode.
1612 offset 196 bit 7 */
1613 bool etb_use_two_wires : 1 {};
1614 /**
1615 * 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.
1616 offset 196 bit 8 */
1617 bool isDoubleSolenoidIdle : 1 {};
1618 /**
1619 offset 196 bit 9 */
1620 bool useEeprom : 1 {};
1621 /**
1622 * Switch between Industrial and Cic PID implementation
1623 offset 196 bit 10 */
1624 bool useCicPidForIdle : 1 {};
1625 /**
1626 offset 196 bit 11 */
1627 bool useTLE8888_cranking_hack : 1 {};
1628 /**
1629 offset 196 bit 12 */
1630 bool kickStartCranking : 1 {};
1631 /**
1632 * This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).
1633 offset 196 bit 13 */
1635 /**
1636 offset 196 bit 14 */
1637 bool launchControlEnabled : 1 {};
1638 /**
1639 offset 196 bit 15 */
1640 bool antiLagEnabled : 1 {};
1641 /**
1642 * For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table).
1643 offset 196 bit 16 */
1644 bool useRunningMathForCranking : 1 {};
1645 /**
1646 * Shall we display real life signal or just the part consumed by trigger decoder.
1647 * Applies to both trigger and cam/vvt input.
1648 offset 196 bit 17 */
1650 /**
1651 offset 196 bit 18 */
1652 bool useTLE8888_stepper : 1 {};
1653 /**
1654 offset 196 bit 19 */
1656 /**
1657 * Print incoming and outgoing first bus CAN messages in rusEFI console
1658 offset 196 bit 20 */
1659 bool verboseCan : 1 {};
1660 /**
1661 * Experimental setting that will cause a misfire
1662 * DO NOT ENABLE.
1663 offset 196 bit 21 */
1664 bool artificialTestMisfire : 1 {};
1665 /**
1666 * 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.
1667 offset 196 bit 22 */
1668 bool useFordRedundantPps : 1 {};
1669 /**
1670 offset 196 bit 23 */
1671 bool cltSensorPulldown : 1 {};
1672 /**
1673 offset 196 bit 24 */
1674 bool iatSensorPulldown : 1 {};
1675 /**
1676 offset 196 bit 25 */
1677 bool allowIdenticalPps : 1 {};
1678 /**
1679 offset 196 bit 26 */
1680 bool overrideVvtTriggerGaps : 1 {};
1681 /**
1682 * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
1683 offset 196 bit 27 */
1684 bool useSpiImu : 1 {};
1685 /**
1686 offset 196 bit 28 */
1687 bool enableStagedInjection : 1 {};
1688 /**
1689 offset 196 bit 29 */
1690 bool useIdleAdvanceWhileCoasting : 1 {};
1691 /**
1692 offset 196 bit 30 */
1693 bool unusedBit_104_30 : 1 {};
1694 /**
1695 offset 196 bit 31 */
1696 bool unusedBit_104_31 : 1 {};
1697 /**
1698 * Closed voltage for primary throttle position sensor
1699 * offset 200
1700 */
1702 /**
1703 * Fully opened voltage for primary throttle position sensor
1704 * offset 202
1705 */
1707 /**
1708 * TPS error detection: what throttle % is unrealistically low?
1709 * Also used for accelerator pedal error detection if so equipped.
1710 * units: %
1711 * offset 204
1712 */
1714 /**
1715 * TPS error detection: what throttle % is unrealistically high?
1716 * Also used for accelerator pedal error detection if so equipped.
1717 * units: %
1718 * offset 206
1719 */
1721 /**
1722 * offset 208
1723 */
1725 /**
1726 * Dwell duration while cranking
1727 * units: ms
1728 * offset 212
1729 */
1731 /**
1732 * Once engine speed passes this value, start reducing ETB angle.
1733 * units: rpm
1734 * offset 216
1735 */
1736 uint16_t etbRevLimitStart;
1737 /**
1738 * 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.
1739 * units: rpm
1740 * offset 218
1741 */
1742 uint16_t etbRevLimitRange;
1743 /**
1744 * @see isMapAveragingEnabled
1745 * offset 220
1746 */
1748 /**
1749 * todo: merge with channel settings, use full-scale Thermistor here!
1750 * offset 360
1751 */
1753 /**
1754 * offset 392
1755 */
1757 /**
1758 * units: deg
1759 * offset 424
1760 */
1761 float launchTimingRetard;
1762 /**
1763 * Maximum commanded airmass for the idle controller.
1764 * units: mg
1765 * offset 428
1766 */
1767 scaled_channel<uint8_t, 1, 2> idleMaximumAirmass;
1768 /**
1769 * need 4 byte alignment
1770 * units: units
1771 * offset 429
1772 */
1773 uint8_t alignmentFill_at_429[1] = {};
1774 /**
1775 * iTerm min value
1776 * offset 430
1777 */
1778 int16_t alternator_iTermMin;
1779 /**
1780 * iTerm max value
1781 * offset 432
1782 */
1783 int16_t alternator_iTermMax;
1784 /**
1785 * need 4 byte alignment
1786 * units: units
1787 * offset 434
1788 */
1789 uint8_t alignmentFill_at_434[2] = {};
1790 /**
1791 * @@DISPLACEMENT_TOOLTIP@@
1792 * units: L
1793 * offset 436
1794 */
1795 float displacement;
1796 /**
1797 * units: RPM
1798 * offset 440
1799 */
1800 uint16_t triggerSimulatorRpm;
1801 /**
1802 * need 4 byte alignment
1803 * units: units
1804 * offset 442
1805 */
1806 uint8_t alignmentFill_at_442[2] = {};
1807 /**
1808 * Number of cylinder the engine has.
1809 * offset 444
1810 */
1811 uint32_t cylindersCount;
1812 /**
1813 * offset 448
1814 */
1816 /**
1817 * offset 449
1818 */
1819 uint8_t justATempTest;
1820 /**
1821 * Delta kPa/psi for MAP sync
1822 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
1823 * offset 450
1824 */
1825 uint8_t mapSyncThreshold;
1826 /**
1827 * need 4 byte alignment
1828 * units: units
1829 * offset 451
1830 */
1831 uint8_t alignmentFill_at_451[1] = {};
1832 /**
1833 * @@CYLINDER_BORE_TOOLTIP@@
1834 * units: mm
1835 * offset 452
1836 */
1837 float cylinderBore;
1838 /**
1839 * Determines the method used for calculating fuel delivery. The following options are available:
1840 * 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.
1841 * 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.
1842 * 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.
1843 * Lua: Allows for custom fuel calculations using Lua scripting, enabling highly specific tuning applications where the other strategies don't apply.
1844 * offset 456
1845 */
1847 /**
1848 * units: %
1849 * offset 457
1850 */
1851 uint8_t ALSMaxTPS;
1852 /**
1853 * This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous".
1854 * offset 458
1855 */
1857 /**
1858 * 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.
1859 * offset 459
1860 */
1862 /**
1863 * Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1864 * offset 460
1865 */
1866 uint16_t boostControlMinRpm;
1867 /**
1868 * Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1869 * offset 462
1870 */
1871 uint8_t boostControlMinTps;
1872 /**
1873 * need 4 byte alignment
1874 * units: units
1875 * offset 463
1876 */
1877 uint8_t alignmentFill_at_463[1] = {};
1878 /**
1879 * Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1880 * offset 464
1881 */
1882 uint16_t boostControlMinMap;
1883 /**
1884 * Wastegate control Solenoid, set to 'NONE' if you are using DC wastegate
1885 * offset 466
1886 */
1888 /**
1889 * offset 468
1890 */
1892 /**
1893 * need 4 byte alignment
1894 * units: units
1895 * offset 469
1896 */
1897 uint8_t alignmentFill_at_469[3] = {};
1898 /**
1899 * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.
1900 * There is tapering towards running timing advance
1901 * set cranking_timing_angle X
1902 * units: deg
1903 * offset 472
1904 */
1906 /**
1907 * Single coil = distributor
1908 * Individual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode
1909 * Wasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder
1910 * Two distributors = A pair of distributors, found on some BMW, Toyota and other engines
1911 * set ignition_mode X
1912 * offset 476
1913 */
1915 /**
1916 * How many consecutive gap rations have to match expected ranges for sync to happen
1917 * units: count
1918 * offset 477
1919 */
1921 /**
1922 * Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).
1923 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
1924 * offset 478
1925 */
1926 uint8_t maxIdleVss;
1927 /**
1928 * Allowed range around detection position
1929 * offset 479
1930 */
1931 uint8_t camDecoder2jzPrecision;
1932 /**
1933 * 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.
1934 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
1935 * offset 480
1936 */
1937 uint16_t minOilPressureAfterStart;
1938 /**
1939 * Dynamic uses the timing map to decide the ignition timing
1940 * Static timing fixes the timing to the value set below (only use for checking static timing with a timing light).
1941 * offset 482
1942 */
1944 /**
1945 * offset 483
1946 */
1948 /**
1949 * This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing
1950 * This mode is useful when adjusting distributor location.
1951 * units: RPM
1952 * offset 484
1953 */
1955 /**
1956 * Angle between Top Dead Center (TDC) and the first trigger event.
1957 * Positive value in case of synchronization point before TDC and negative in case of synchronization point after TDC
1958 * .Knowing this angle allows us to control timing and other angles in reference to TDC.
1959 * HOWTO:
1960 * 1: Switch to fixed timing mode on 'ignition setting' dialog
1961 * 2: use an actual timing light to calibrate
1962 * 3: add/subtract until timing light confirms desired fixed timing value!'
1963 * units: deg btdc
1964 * offset 488
1965 */
1967 /**
1968 * 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.
1969 * units: coef
1970 * offset 492
1971 */
1973 /**
1974 * 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.
1975 * units: coef
1976 * offset 496
1977 */
1978 float vbattDividerCoeff;
1979 /**
1980 * offset 500
1981 */
1983 /**
1984 * offset 502
1985 */
1987 /**
1988 * need 4 byte alignment
1989 * units: units
1990 * offset 503
1991 */
1992 uint8_t alignmentFill_at_503[1] = {};
1993 /**
1994 * Cooling fan turn-on temperature threshold, in Celsius
1995 * units: SPECIAL_CASE_TEMPERATURE
1996 * offset 504
1997 */
1998 int16_t fanOnTemperature;
1999 /**
2000 * Cooling fan turn-off temperature threshold, in Celsius
2001 * units: SPECIAL_CASE_TEMPERATURE
2002 * offset 506
2003 */
2004 int16_t fanOffTemperature;
2005 /**
2006 * offset 508
2007 */
2009 /**
2010 * offset 510
2011 */
2013 /**
2014 * need 4 byte alignment
2015 * units: units
2016 * offset 511
2017 */
2018 uint8_t alignmentFill_at_511[1] = {};
2019 /**
2020 * Cooling fan turn-on temperature threshold, in Celsius
2021 * units: SPECIAL_CASE_TEMPERATURE
2022 * offset 512
2023 */
2024 int16_t fan2OnTemperature;
2025 /**
2026 * Cooling fan turn-off temperature threshold, in Celsius
2027 * units: SPECIAL_CASE_TEMPERATURE
2028 * offset 514
2029 */
2030 int16_t fan2OffTemperature;
2031 /**
2032 * offset 516
2033 */
2034 int8_t disableFan1AtSpeed;
2035 /**
2036 * offset 517
2037 */
2038 int8_t disableFan2AtSpeed;
2039 /**
2040 * need 4 byte alignment
2041 * units: units
2042 * offset 518
2043 */
2044 uint8_t alignmentFill_at_518[2] = {};
2045 /**
2046 * Inhibit operation of this fan while the engine is not running.
2047 offset 520 bit 0 */
2048 bool disableFan1WhenStopped : 1 {};
2049 /**
2050 * Inhibit operation of this fan while the engine is not running.
2051 offset 520 bit 1 */
2052 bool disableFan2WhenStopped : 1 {};
2053 /**
2054 offset 520 bit 2 */
2055 bool unusedBit_170_2 : 1 {};
2056 /**
2057 offset 520 bit 3 */
2058 bool unusedBit_170_3 : 1 {};
2059 /**
2060 offset 520 bit 4 */
2061 bool unusedBit_170_4 : 1 {};
2062 /**
2063 offset 520 bit 5 */
2064 bool unusedBit_170_5 : 1 {};
2065 /**
2066 offset 520 bit 6 */
2067 bool unusedBit_170_6 : 1 {};
2068 /**
2069 offset 520 bit 7 */
2070 bool unusedBit_170_7 : 1 {};
2071 /**
2072 offset 520 bit 8 */
2073 bool unusedBit_170_8 : 1 {};
2074 /**
2075 offset 520 bit 9 */
2076 bool unusedBit_170_9 : 1 {};
2077 /**
2078 offset 520 bit 10 */
2079 bool unusedBit_170_10 : 1 {};
2080 /**
2081 offset 520 bit 11 */
2082 bool unusedBit_170_11 : 1 {};
2083 /**
2084 offset 520 bit 12 */
2085 bool unusedBit_170_12 : 1 {};
2086 /**
2087 offset 520 bit 13 */
2088 bool unusedBit_170_13 : 1 {};
2089 /**
2090 offset 520 bit 14 */
2091 bool unusedBit_170_14 : 1 {};
2092 /**
2093 offset 520 bit 15 */
2094 bool unusedBit_170_15 : 1 {};
2095 /**
2096 offset 520 bit 16 */
2097 bool unusedBit_170_16 : 1 {};
2098 /**
2099 offset 520 bit 17 */
2100 bool unusedBit_170_17 : 1 {};
2101 /**
2102 offset 520 bit 18 */
2103 bool unusedBit_170_18 : 1 {};
2104 /**
2105 offset 520 bit 19 */
2106 bool unusedBit_170_19 : 1 {};
2107 /**
2108 offset 520 bit 20 */
2109 bool unusedBit_170_20 : 1 {};
2110 /**
2111 offset 520 bit 21 */
2112 bool unusedBit_170_21 : 1 {};
2113 /**
2114 offset 520 bit 22 */
2115 bool unusedBit_170_22 : 1 {};
2116 /**
2117 offset 520 bit 23 */
2118 bool unusedBit_170_23 : 1 {};
2119 /**
2120 offset 520 bit 24 */
2121 bool unusedBit_170_24 : 1 {};
2122 /**
2123 offset 520 bit 25 */
2124 bool unusedBit_170_25 : 1 {};
2125 /**
2126 offset 520 bit 26 */
2127 bool unusedBit_170_26 : 1 {};
2128 /**
2129 offset 520 bit 27 */
2130 bool unusedBit_170_27 : 1 {};
2131 /**
2132 offset 520 bit 28 */
2133 bool unusedBit_170_28 : 1 {};
2134 /**
2135 offset 520 bit 29 */
2136 bool unusedBit_170_29 : 1 {};
2137 /**
2138 offset 520 bit 30 */
2139 bool unusedBit_170_30 : 1 {};
2140 /**
2141 offset 520 bit 31 */
2142 bool unusedBit_170_31 : 1 {};
2143 /**
2144 * offset 524
2145 */
2147 /**
2148 * offset 528
2149 */
2151 /**
2152 * need 4 byte alignment
2153 * units: units
2154 * offset 530
2155 */
2156 uint8_t alignmentFill_at_530[2] = {};
2157 /**
2158 * 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.
2159 * units: revs/km
2160 * offset 532
2161 */
2162 float driveWheelRevPerKm;
2163 /**
2164 * CANbus thread period in ms
2165 * units: ms
2166 * offset 536
2167 */
2168 int canSleepPeriodMs;
2169 /**
2170 * units: index
2171 * offset 540
2172 */
2174 /**
2175 * First analog throttle body, first sensor. See also pedalPositionAdcChannel
2176 * Analog TPS inputs have 200Hz low-pass cutoff.
2177 * offset 544
2178 */
2180 /**
2181 * 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.
2182 * offset 545
2183 */
2185 /**
2186 * 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.
2187 * offset 546
2188 */
2190 /**
2191 * Second throttle body position sensor, single channel so far
2192 * offset 547
2193 */
2195 /**
2196 * 0.1 is a good default value
2197 * units: x
2198 * offset 548
2199 */
2201 /**
2202 * offset 552
2203 */
2205 /**
2206 * Extra air taper amount
2207 * units: %
2208 * offset 564
2209 */
2210 float airByRpmTaper;
2211 /**
2212 * 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.
2213 * units: %
2214 * offset 568
2215 */
2217 /**
2218 * offset 569
2219 */
2221 /**
2222 * offset 570
2223 */
2224 uint8_t acrRevolutions;
2225 /**
2226 * need 4 byte alignment
2227 * units: units
2228 * offset 571
2229 */
2230 uint8_t alignmentFill_at_571[1] = {};
2231 /**
2232 * offset 572
2233 */
2235 /**
2236 * units: volts
2237 * offset 576
2238 */
2239 float adcVcc;
2240 /**
2241 * Magic engine phase: we compare instant MAP at X to instant MAP at x+360 angle in one complete cycle
2242 * units: Deg
2243 * offset 580
2244 */
2246 /**
2247 * 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.
2248 * offset 584
2249 */
2250 brain_input_pin_e camInputs[CAM_INPUTS_COUNT] = {};
2251 /**
2252 * offset 592
2253 */
2255 /**
2256 * Electronic throttle pedal position first channel
2257 * See throttlePedalPositionSecondAdcChannel for second channel
2258 * See also tps1_1AdcChannel
2259 * See throttlePedalUpVoltage and throttlePedalWOTVoltage
2260 * offset 612
2261 */
2263 /**
2264 * TPS/PPS error threshold
2265 * units: %
2266 * offset 613
2267 */
2268 scaled_channel<uint8_t, 10, 1> etbSplit;
2269 /**
2270 * offset 614
2271 */
2273 /**
2274 * offset 616
2275 */
2277 /**
2278 * offset 617
2279 */
2281 /**
2282 * need 4 byte alignment
2283 * units: units
2284 * offset 618
2285 */
2286 uint8_t alignmentFill_at_618[2] = {};
2287 /**
2288 * @see hasBaroSensor
2289 * offset 620
2290 */
2292 /**
2293 * offset 632
2294 */
2296 /**
2297 * 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),
2298 * units: %
2299 * offset 644
2300 */
2301 scaled_channel<uint8_t, 10, 1> knockRetardAggression;
2302 /**
2303 * After a knock event, reapply timing at this rate.
2304 * units: deg/s
2305 * offset 645
2306 */
2307 scaled_channel<uint8_t, 10, 1> knockRetardReapplyRate;
2308 /**
2309 * Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync.
2310 * offset 646
2311 */
2313 /**
2314 * offset 647
2315 */
2317 /**
2318 * 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.
2319 * units: ratio
2320 * offset 648
2321 */
2322 scaled_channel<uint16_t, 1000, 1> vssGearRatio;
2323 /**
2324 * Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response.
2325 * offset 650
2326 */
2327 uint8_t vssFilterReciprocal;
2328 /**
2329 * 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.
2330 * units: count
2331 * offset 651
2332 */
2333 uint8_t vssToothCount;
2334 /**
2335 * Allows you to change the default load axis used for the VE table, which is typically MAP (manifold absolute pressure).
2336 * offset 652
2337 */
2339 /**
2340 * need 4 byte alignment
2341 * units: units
2342 * offset 653
2343 */
2344 uint8_t alignmentFill_at_653[1] = {};
2345 /**
2346 * offset 654
2347 */
2348 Gpio l9779_cs;
2349 /**
2350 * offset 656
2351 */
2352 output_pin_e injectionPins[MAX_CYLINDER_COUNT] = {};
2353 /**
2354 * offset 680
2355 */
2356 output_pin_e ignitionPins[MAX_CYLINDER_COUNT] = {};
2357 /**
2358 * offset 704
2359 */
2361 /**
2362 * offset 705
2363 */
2365 /**
2366 * offset 706
2367 */
2369 /**
2370 * offset 708
2371 */
2373 /**
2374 * How many consecutive VVT gap rations have to match expected ranges for sync to happen
2375 * units: count
2376 * offset 709
2377 */
2379 /**
2380 * Check engine light, also malfunction indicator light. Always blinks once on boot.
2381 * offset 710
2382 */
2384 /**
2385 * offset 712
2386 */
2388 /**
2389 * need 4 byte alignment
2390 * units: units
2391 * offset 713
2392 */
2393 uint8_t alignmentFill_at_713[1] = {};
2394 /**
2395 * Some cars have a switch to indicate that clutch pedal is all the way down
2396 * offset 714
2397 */
2399 /**
2400 * offset 716
2401 */
2403 /**
2404 * offset 718
2405 */
2407 /**
2408 * offset 719
2409 */
2411 /**
2412 * offset 720
2413 */
2414 Gpio digitalPotentiometerChipSelect[DIGIPOT_COUNT] = {};
2415 /**
2416 * offset 728
2417 */
2419 /**
2420 * offset 729
2421 */
2423 /**
2424 * offset 730
2425 */
2427 /**
2428 * Digital Potentiometer is used by stock ECU stimulation code
2429 * offset 732
2430 */
2432 /**
2433 * offset 733
2434 */
2436 /**
2437 * offset 734
2438 */
2440 /**
2441 * offset 736
2442 */
2444 /**
2445 * Useful in Research&Development phase
2446 * offset 737
2447 */
2449 /**
2450 * First throttle body, second sensor.
2451 * offset 738
2452 */
2454 /**
2455 * Second throttle body, second sensor.
2456 * offset 739
2457 */
2459 /**
2460 * Electronic throttle pedal position input
2461 * Second channel
2462 * See also tps1_1AdcChannel
2463 * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
2464 * offset 740
2465 */
2467 /**
2468 * AFR, WBO, EGO - whatever you like to call it
2469 * offset 741
2470 */
2472 /**
2473 * offset 742
2474 */
2475 Gpio mc33810_cs[C_MC33810_COUNT] = {};
2476 /**
2477 * 0.1 is a good default value
2478 * units: x
2479 * offset 744
2480 */
2481 float idle_antiwindupFreq;
2482 /**
2483 * offset 748
2484 */
2485 brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT] = {};
2486 /**
2487 * 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.
2488 * units: us
2489 * offset 752
2490 */
2491 uint16_t mc33_t_min_boost;
2492 /**
2493 * Ratio between the wheels and your transmission output.
2494 * units: ratio
2495 * offset 754
2496 */
2497 scaled_channel<uint16_t, 100, 1> finalGearRatio;
2498 /**
2499 * offset 756
2500 */
2502 /**
2503 * offset 758
2504 */
2506 /**
2507 * need 4 byte alignment
2508 * units: units
2509 * offset 759
2510 */
2511 uint8_t alignmentFill_at_759[1] = {};
2512 /**
2513 * 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.
2514 * See also directSelfStimulation which is different.
2515 * offset 760
2516 */
2517 Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT] = {};
2518 /**
2519 * units: g/s
2520 * offset 764
2521 */
2522 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
2523 /**
2524 * offset 766
2525 */
2526 pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT] = {};
2527 /**
2528 * offset 768
2529 */
2531 /**
2532 * need 4 byte alignment
2533 * units: units
2534 * offset 769
2535 */
2536 uint8_t alignmentFill_at_769[1] = {};
2537 /**
2538 * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
2539 * offset 770
2540 */
2542 /**
2543 * offset 772
2544 */
2546 /**
2547 * units: RPM
2548 * offset 773
2549 */
2550 scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
2551 /**
2552 * units: %
2553 * offset 774
2554 */
2555 scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
2556 /**
2557 * need 4 byte alignment
2558 * units: units
2559 * offset 775
2560 */
2561 uint8_t alignmentFill_at_775[1] = {};
2562 /**
2563 offset 776 bit 0 */
2564 bool is_enabled_spi_1 : 1 {};
2565 /**
2566 offset 776 bit 1 */
2567 bool is_enabled_spi_2 : 1 {};
2568 /**
2569 offset 776 bit 2 */
2570 bool is_enabled_spi_3 : 1 {};
2571 /**
2572 offset 776 bit 3 */
2573 bool isSdCardEnabled : 1 {};
2574 /**
2575 * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
2576 offset 776 bit 4 */
2577 bool rusefiVerbose29b : 1 {};
2578 /**
2579 offset 776 bit 5 */
2580 bool rethrowHardFault : 1 {};
2581 /**
2582 offset 776 bit 6 */
2583 bool verboseQuad : 1 {};
2584 /**
2585 * This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed.
2586 offset 776 bit 7 */
2587 bool useStepperIdle : 1 {};
2588 /**
2589 offset 776 bit 8 */
2590 bool lambdaProtectionEnable : 1 {};
2591 /**
2592 offset 776 bit 9 */
2593 bool verboseTLE8888 : 1 {};
2594 /**
2595 * CAN broadcast using custom rusEFI protocol
2596 offset 776 bit 10 */
2597 bool enableVerboseCanTx : 1 {};
2598 /**
2599 offset 776 bit 11 */
2600 bool externalRusEfiGdiModule : 1 {};
2601 /**
2602 * Useful for individual intakes
2603 offset 776 bit 12 */
2604 bool measureMapOnlyInOneCylinder : 1 {};
2605 /**
2606 offset 776 bit 13 */
2608 /**
2609 * 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.
2610 offset 776 bit 14 */
2611 bool isFasterEngineSpinUpEnabled : 1 {};
2612 /**
2613 * This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing.
2614 offset 776 bit 15 */
2615 bool coastingFuelCutEnabled : 1 {};
2616 /**
2617 * 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.
2618 offset 776 bit 16 */
2619 bool useIacTableForCoasting : 1 {};
2620 /**
2621 offset 776 bit 17 */
2622 bool useNoiselessTriggerDecoder : 1 {};
2623 /**
2624 offset 776 bit 18 */
2625 bool useIdleTimingPidControl : 1 {};
2626 /**
2627 * 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.
2628 offset 776 bit 19 */
2629 bool disableEtbWhenEngineStopped : 1 {};
2630 /**
2631 offset 776 bit 20 */
2632 bool is_enabled_spi_4 : 1 {};
2633 /**
2634 * Disable the electronic throttle motor and DC idle motor for testing.
2635 * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle.
2636 offset 776 bit 21 */
2637 bool pauseEtbControl : 1 {};
2638 /**
2639 offset 776 bit 22 */
2640 bool verboseKLine : 1 {};
2641 /**
2642 offset 776 bit 23 */
2643 bool idleIncrementalPidCic : 1 {};
2644 /**
2645 * AEM X-Series or rusEFI Wideband
2646 offset 776 bit 24 */
2647 bool enableAemXSeries : 1 {};
2648 /**
2649 offset 776 bit 25 */
2650 bool modeledFlowIdle : 1 {};
2651 /**
2652 offset 776 bit 26 */
2653 bool isTuningDetectorEnabled : 1 {};
2654 /**
2655 offset 776 bit 27 */
2657 /**
2658 offset 776 bit 28 */
2659 bool unusedBit_311_30 : 1 {};
2660 /**
2661 offset 776 bit 29 */
2662 bool unusedBit_311_31 : 1 {};
2663 /**
2664 offset 776 bit 30 */
2665 bool unusedBit_315_30 : 1 {};
2666 /**
2667 offset 776 bit 31 */
2668 bool unusedBit_315_31 : 1 {};
2669 /**
2670 * offset 780
2671 */
2672 brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT] = {};
2673 /**
2674 * offset 788
2675 */
2677 /**
2678 * need 4 byte alignment
2679 * units: units
2680 * offset 789
2681 */
2682 uint8_t alignmentFill_at_789[3] = {};
2683 /**
2684 * offset 792
2685 */
2686 uint32_t verboseCanBaseAddress;
2687 /**
2688 * Boost Voltage
2689 * units: v
2690 * offset 796
2691 */
2692 uint8_t mc33_hvolt;
2693 /**
2694 * need 4 byte alignment
2695 * units: units
2696 * offset 797
2697 */
2698 uint8_t alignmentFill_at_797[1] = {};
2699 /**
2700 * Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost.
2701 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
2702 * offset 798
2703 */
2705 /**
2706 * units: %
2707 * offset 800
2708 */
2710 /**
2711 * units: %
2712 * offset 801
2713 */
2715 /**
2716 * offset 802
2717 */
2719 /**
2720 * offset 803
2721 */
2723 /**
2724 * offset 804
2725 */
2727 /**
2728 * need 4 byte alignment
2729 * units: units
2730 * offset 805
2731 */
2732 uint8_t alignmentFill_at_805[1] = {};
2733 /**
2734 * How far above idle speed do we consider idling, i.e. coasting detection threshold.
2735 * For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.
2736 * units: RPM
2737 * offset 806
2738 */
2739 int16_t idlePidRpmUpperLimit;
2740 /**
2741 * Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment.
2742 * units: ms
2743 * offset 808
2744 */
2745 scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
2746 /**
2747 * offset 810
2748 */
2750 /**
2751 * offset 812
2752 */
2754 /**
2755 * offset 814
2756 */
2758 /**
2759 * Some vehicles have a switch to indicate that clutch pedal is all the way up
2760 * offset 816
2761 */
2763 /**
2764 * offset 818
2765 */
2767 /**
2768 * offset 819
2769 */
2771 /**
2772 * offset 820
2773 */
2774 Gpio max31855_cs[EGT_CHANNEL_COUNT] = {};
2775 /**
2776 * Continental/GM flex fuel sensor, 50-150hz type
2777 * offset 836
2778 */
2780 /**
2781 * 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
2782 * units: rpm
2783 * offset 838
2784 */
2785 uint16_t torqueReductionArmingRpm;
2786 /**
2787 * offset 840
2788 */
2790 /**
2791 * offset 841
2792 */
2794 /**
2795 * Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0
2796 * units: :1
2797 * offset 842
2798 */
2799 scaled_channel<uint8_t, 10, 1> stoichRatioSecondary;
2800 /**
2801 * Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open.
2802 * units: %
2803 * offset 843
2804 */
2805 uint8_t etbMaximumPosition;
2806 /**
2807 * Rate the ECU will log to the SD card, in hz (log lines per second).
2808 * units: hz
2809 * offset 844
2810 */
2811 uint16_t sdCardLogFrequency;
2812 /**
2813 * offset 846
2814 */
2816 /**
2817 * need 4 byte alignment
2818 * units: units
2819 * offset 847
2820 */
2821 uint8_t alignmentFill_at_847[1] = {};
2822 /**
2823 * offset 848
2824 */
2825 uint16_t launchCorrectionsEndRpm;
2826 /**
2827 * offset 850
2828 */
2830 /**
2831 * On some vehicles we can disable starter once engine is already running
2832 * offset 852
2833 */
2835 /**
2836 * need 4 byte alignment
2837 * units: units
2838 * offset 853
2839 */
2840 uint8_t alignmentFill_at_853[1] = {};
2841 /**
2842 * Some Subaru and some Mazda use double-solenoid idle air valve
2843 * offset 854
2844 */
2846 /**
2847 * See also starterControlPin
2848 * offset 856
2849 */
2851 /**
2852 * units: RPM
2853 * offset 858
2854 */
2855 scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
2856 /**
2857 * offset 859
2858 */
2860 /**
2861 * 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.
2862 * units: count
2863 * offset 860
2864 */
2866 /**
2867 * 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%.
2868 * units: %
2869 * offset 864
2870 */
2872 /**
2873 * units: %
2874 * offset 866
2875 */
2877 /**
2878 * Closed voltage for secondary throttle position sensor
2879 * offset 868
2880 */
2882 /**
2883 * Fully opened voltage for secondary throttle position sensor
2884 * offset 870
2885 */
2887 /**
2888 * Maximum time to crank starter when start/stop button is pressed
2889 * units: Seconds
2890 * offset 872
2891 */
2892 uint16_t startCrankingDuration;
2893 /**
2894 * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
2895 * offset 874
2896 */
2898 /**
2899 * offset 876
2900 */
2902 /**
2903 * need 4 byte alignment
2904 * units: units
2905 * offset 877
2906 */
2907 uint8_t alignmentFill_at_877[1] = {};
2908 /**
2909 * offset 878
2910 */
2912 /**
2913 * units: %
2914 * offset 880
2915 */
2916 uint8_t lambdaProtectionMinTps;
2917 /**
2918 * Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed
2919 * units: s
2920 * offset 881
2921 */
2922 scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
2923 /**
2924 * need 4 byte alignment
2925 * units: units
2926 * offset 882
2927 */
2928 uint8_t alignmentFill_at_882[2] = {};
2929 /**
2930 * offset 884
2931 */
2932 script_setting_t scriptSetting[SCRIPT_SETTING_COUNT] = {};
2933 /**
2934 * offset 916
2935 */
2937 /**
2938 * offset 918
2939 */
2941 /**
2942 * offset 920
2943 */
2945 /**
2946 * offset 922
2947 */
2949 /**
2950 * offset 924
2951 */
2953 /**
2954 * offset 926
2955 */
2957 /**
2958 * offset 928
2959 */
2961 /**
2962 * offset 930
2963 */
2965 /**
2966 * offset 932
2967 */
2969 /**
2970 * UNUSED
2971 * Will remove in 2026 for sure
2972 * Saab Combustion Detection Module knock signal input pin
2973 * also known as Saab Ion Sensing Module
2974 * offset 934
2975 */
2977 /**
2978 * offset 936
2979 */
2981 /**
2982 * need 4 byte alignment
2983 * units: units
2984 * offset 937
2985 */
2986 uint8_t alignmentFill_at_937[3] = {};
2987 /**
2988 * 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.
2989 offset 940 bit 0 */
2990 bool idleReturnTargetRamp : 1 {};
2991 /**
2992 offset 940 bit 1 */
2994 /**
2995 * If enabled we use two H-bridges to drive stepper idle air valve
2996 offset 940 bit 2 */
2998 /**
2999 offset 940 bit 3 */
3000 bool multisparkEnable : 1 {};
3001 /**
3002 offset 940 bit 4 */
3003 bool enableLaunchRetard : 1 {};
3004 /**
3005 offset 940 bit 5 */
3006 bool canInputBCM : 1 {};
3007 /**
3008 * This property is useful if using rusEFI as TCM or BCM only
3009 offset 940 bit 6 */
3010 bool consumeObdSensors : 1 {};
3011 /**
3012 * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
3013 offset 940 bit 7 */
3014 bool enableCanVss : 1 {};
3015 /**
3016 * 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.
3017 offset 940 bit 8 */
3018 bool stftIgnoreErrorMagnitude : 1 {};
3019 /**
3020 offset 940 bit 9 */
3022 /**
3023 offset 940 bit 10 */
3024 bool enableSoftwareKnock : 1 {};
3025 /**
3026 * Verbose info in console below engineSnifferRpmThreshold
3027 offset 940 bit 11 */
3028 bool verboseVVTDecoding : 1 {};
3029 /**
3030 offset 940 bit 12 */
3031 bool invertCamVVTSignal : 1 {};
3032 /**
3033 * When set to yes, it enables intake air temperature-based corrections for Alpha-N tuning strategies.
3034 offset 940 bit 13 */
3035 bool alphaNUseIat : 1 {};
3036 /**
3037 offset 940 bit 14 */
3038 bool knockBankCyl1 : 1 {};
3039 /**
3040 offset 940 bit 15 */
3041 bool knockBankCyl2 : 1 {};
3042 /**
3043 offset 940 bit 16 */
3044 bool knockBankCyl3 : 1 {};
3045 /**
3046 offset 940 bit 17 */
3047 bool knockBankCyl4 : 1 {};
3048 /**
3049 offset 940 bit 18 */
3050 bool knockBankCyl5 : 1 {};
3051 /**
3052 offset 940 bit 19 */
3053 bool knockBankCyl6 : 1 {};
3054 /**
3055 offset 940 bit 20 */
3056 bool knockBankCyl7 : 1 {};
3057 /**
3058 offset 940 bit 21 */
3059 bool knockBankCyl8 : 1 {};
3060 /**
3061 offset 940 bit 22 */
3062 bool knockBankCyl9 : 1 {};
3063 /**
3064 offset 940 bit 23 */
3065 bool knockBankCyl10 : 1 {};
3066 /**
3067 offset 940 bit 24 */
3068 bool knockBankCyl11 : 1 {};
3069 /**
3070 offset 940 bit 25 */
3071 bool knockBankCyl12 : 1 {};
3072 /**
3073 offset 940 bit 26 */
3074 bool tcuEnabled : 1 {};
3075 /**
3076 offset 940 bit 27 */
3077 bool canBroadcastUseChannelTwo : 1 {};
3078 /**
3079 * If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils
3080 offset 940 bit 28 */
3082 /**
3083 * Print incoming and outgoing second bus CAN messages in rusEFI console
3084 offset 940 bit 29 */
3085 bool verboseCan2 : 1 {};
3086 /**
3087 offset 940 bit 30 */
3088 bool unusedBit_412_30 : 1 {};
3089 /**
3090 offset 940 bit 31 */
3091 bool unusedBit_412_31 : 1 {};
3092 /**
3093 * offset 944
3094 */
3095 dc_io etbIo[ETB_COUNT] = {};
3096 /**
3097 * offset 960
3098 */
3100 /**
3101 * offset 962
3102 */
3104 /**
3105 * offset 964
3106 */
3108 /**
3109 * offset 984
3110 */
3112 /**
3113 * offset 985
3114 */
3116 /**
3117 * offset 986
3118 */
3120 /**
3121 * units: Hz
3122 * offset 988
3123 */
3125 /**
3126 * offset 992
3127 */
3129 /**
3130 * offset 993
3131 */
3133 /**
3134 * offset 994
3135 */
3137 /**
3138 * How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs.
3139 * units: sec
3140 * offset 995
3141 */
3142 scaled_channel<uint8_t, 20, 1> tpsAccelLookback;
3143 /**
3144 * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
3145 * units: roc
3146 * offset 996
3147 */
3149 /**
3150 * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
3151 * units: coeff
3152 * offset 1000
3153 */
3155 /**
3156 * Selects the acceleration enrichment strategy.
3157 * offset 1004
3158 */
3160 /**
3161 * 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.
3162 * units: sec
3163 * offset 1005
3164 */
3165 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterDfcoTime;
3166 /**
3167 * 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.
3168 * units: sec
3169 * offset 1006
3170 */
3171 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterAccelTime;
3172 /**
3173 * need 4 byte alignment
3174 * units: units
3175 * offset 1007
3176 */
3177 uint8_t alignmentFill_at_1007[1] = {};
3178 /**
3179 * Launch disabled above this speed if setting is above zero
3180 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
3181 * offset 1008
3182 */
3184 /**
3185 * Starting Launch RPM window to activate (subtracts from Launch RPM)
3186 * units: RPM
3187 * offset 1012
3188 */
3189 int launchRpmWindow;
3190 /**
3191 * units: ms
3192 * offset 1016
3193 */
3195 /**
3196 * A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.
3197 * '100%' means no filtering, 98% would be some filtering.
3198 * units: percent
3199 * offset 1020
3200 */
3201 float ppsExpAverageAlpha;
3202 /**
3203 * A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.
3204 * '1' means no filtering, 0.98 would be some filtering.
3205 * offset 1024
3206 */
3207 float mapExpAverageAlpha;
3208 /**
3209 * offset 1028
3210 */
3212 /**
3213 * offset 1032
3214 */
3215 float turbochargerFilter;
3216 /**
3217 * offset 1036
3218 */
3220 /**
3221 * offset 1040
3222 */
3223 float launchActivateDelay;
3224 /**
3225 * offset 1044
3226 */
3227 stft_s stft;
3228 /**
3229 * offset 1072
3230 */
3231 ltft_s ltft;
3232 /**
3233 * offset 1088
3234 */
3235 dc_io stepperDcIo[DC_PER_STEPPER] = {};
3236 /**
3237 * For example, BMW, GM or Chevrolet
3238 * REQUIRED for rusEFI Online
3239 * offset 1104
3240 */
3242 /**
3243 * For example, LS1 or NB2
3244 * REQUIRED for rusEFI Online
3245 * offset 1136
3246 */
3248 /**
3249 * For example, Hunchback or Orange Miata
3250 * Vehicle name has to be unique between your vehicles.
3251 * REQUIRED for rusEFI Online
3252 * offset 1168
3253 */
3255 /**
3256 * offset 1200
3257 */
3258 output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT] = {};
3259 /**
3260 * offset 1212
3261 */
3262 dc_function_e etbFunctions[ETB_COUNT] = {};
3263 /**
3264 * offset 1214
3265 */
3267 /**
3268 * need 4 byte alignment
3269 * units: units
3270 * offset 1215
3271 */
3272 uint8_t alignmentFill_at_1215[1] = {};
3273 /**
3274 * offset 1216
3275 */
3277 /**
3278 * offset 1218
3279 */
3281 /**
3282 * need 4 byte alignment
3283 * units: units
3284 * offset 1219
3285 */
3286 uint8_t alignmentFill_at_1219[1] = {};
3287 /**
3288 * offset 1220
3289 */
3291 /**
3292 * offset 1222
3293 */
3294 output_pin_e luaOutputPins[LUA_PWM_COUNT] = {};
3295 /**
3296 * need 4 byte alignment
3297 * units: units
3298 * offset 1238
3299 */
3300 uint8_t alignmentFill_at_1238[2] = {};
3301 /**
3302 * Angle between cam sensor and VVT zero position
3303 * units: value
3304 * offset 1240
3305 */
3306 float vvtOffsets[CAM_INPUTS_COUNT] = {};
3307 /**
3308 * offset 1256
3309 */
3310 vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT] = {};
3311 /**
3312 * offset 1288
3313 */
3314 gppwm_note_t gpPwmNote[GPPWM_CHANNELS] = {};
3315 /**
3316 * Closed voltage for secondary throttle position sensor
3317 * offset 1352
3318 */
3320 /**
3321 * Fully opened voltage for secondary throttle position sensor
3322 * offset 1354
3323 */
3325 /**
3326 * Select which bus the wideband controller is attached to.
3327 offset 1356 bit 0 */
3328 bool widebandOnSecondBus : 1 {};
3329 /**
3330 * Enables lambda sensor closed loop feedback for fuelling.
3331 offset 1356 bit 1 */
3333 /**
3334 * Write SD card log even when powered by USB
3335 offset 1356 bit 2 */
3336 bool alwaysWriteSdCard : 1 {};
3337 /**
3338 * Second harmonic (aka double) is usually quieter background noise
3339 offset 1356 bit 3 */
3341 /**
3342 * Unlocking only via rusEFI console using 'unlock PICODEBUG' command. Use 'reset to default firmware' if pincode is lost.
3343 offset 1356 bit 4 */
3344 bool yesUnderstandLocking : 1 {};
3345 /**
3346 * Sometimes we have a performance issue while printing error
3347 offset 1356 bit 5 */
3348 bool silentTriggerError : 1 {};
3349 /**
3350 offset 1356 bit 6 */
3351 bool useLinearCltSensor : 1 {};
3352 /**
3353 * enable can_read/disable can_read
3354 offset 1356 bit 7 */
3355 bool canReadEnabled : 1 {};
3356 /**
3357 * enable can_write/disable can_write. See also can1ListenMode
3358 offset 1356 bit 8 */
3359 bool canWriteEnabled : 1 {};
3360 /**
3361 offset 1356 bit 9 */
3362 bool useLinearIatSensor : 1 {};
3363 /**
3364 offset 1356 bit 10 */
3365 bool enableOilPressureProtect : 1 {};
3366 /**
3367 * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
3368 offset 1356 bit 11 */
3369 bool tachPulseDurationAsDutyCycle : 1 {};
3370 /**
3371 * This enables smart alternator control and activates the extra alternator settings.
3372 offset 1356 bit 12 */
3373 bool isAlternatorControlEnabled : 1 {};
3374 /**
3375 * https://wiki.rusefi.com/Trigger-Configuration-Guide
3376 * This setting flips the signal from the primary engine speed sensor.
3377 offset 1356 bit 13 */
3378 bool invertPrimaryTriggerSignal : 1 {};
3379 /**
3380 * https://wiki.rusefi.com/Trigger-Configuration-Guide
3381 * This setting flips the signal from the secondary engine speed sensor.
3382 offset 1356 bit 14 */
3383 bool invertSecondaryTriggerSignal : 1 {};
3384 /**
3385 * 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.
3386 offset 1356 bit 15 */
3387 bool cutFuelOnHardLimit : 1 {};
3388 /**
3389 * 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.
3390 * Be careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer.
3391 offset 1356 bit 16 */
3392 bool cutSparkOnHardLimit : 1 {};
3393 /**
3394 offset 1356 bit 17 */
3395 bool launchFuelCutEnable : 1 {};
3396 /**
3397 * This is the Cut Mode normally used
3398 offset 1356 bit 18 */
3399 bool launchSparkCutEnable : 1 {};
3400 /**
3401 offset 1356 bit 19 */
3402 bool torqueReductionEnabled : 1 {};
3403 /**
3404 * When we sync cam sensor is that first or second full engine revolution of the four stroke cycle?
3405 offset 1356 bit 20 */
3407 /**
3408 offset 1356 bit 21 */
3409 bool limitTorqueReductionTime : 1 {};
3410 /**
3411 * Are you a developer troubleshooting TS over CAN ISO/TP?
3412 offset 1356 bit 22 */
3413 bool verboseIsoTp : 1 {};
3414 /**
3415 * In this mode only trigger events go into engine sniffer and not coils/injectors etc
3416 offset 1356 bit 23 */
3417 bool engineSnifferFocusOnInputs : 1 {};
3418 /**
3419 offset 1356 bit 24 */
3420 bool twoStroke : 1 {};
3421 /**
3422 * Where is your primary skipped wheel located?
3423 offset 1356 bit 25 */
3424 bool skippedWheelOnCam : 1 {};
3425 /**
3426 offset 1356 bit 26 */
3427 bool unusedBit_488_26 : 1 {};
3428 /**
3429 offset 1356 bit 27 */
3430 bool unusedBit_488_27 : 1 {};
3431 /**
3432 offset 1356 bit 28 */
3433 bool unusedBit_488_28 : 1 {};
3434 /**
3435 offset 1356 bit 29 */
3436 bool unusedBit_488_29 : 1 {};
3437 /**
3438 offset 1356 bit 30 */
3439 bool unusedBit_488_30 : 1 {};
3440 /**
3441 offset 1356 bit 31 */
3442 bool unusedBit_488_31 : 1 {};
3443 /**
3444 * A/C button input
3445 * offset 1360
3446 */
3448 /**
3449 * offset 1362
3450 */
3452 /**
3453 * Expected neutral position
3454 * units: %
3455 * offset 1363
3456 */
3457 uint8_t etbNeutralPosition;
3458 /**
3459 * See also idleRpmPid
3460 * offset 1364
3461 */
3463 /**
3464 * need 4 byte alignment
3465 * units: units
3466 * offset 1365
3467 */
3468 uint8_t alignmentFill_at_1365[3] = {};
3469 /**
3470 offset 1368 bit 0 */
3471 bool isInjectionEnabled : 1 {};
3472 /**
3473 offset 1368 bit 1 */
3474 bool isIgnitionEnabled : 1 {};
3475 /**
3476 * When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders.
3477 offset 1368 bit 2 */
3478 bool isCylinderCleanupEnabled : 1 {};
3479 /**
3480 * Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?
3481 offset 1368 bit 3 */
3482 bool complexWallModel : 1 {};
3483 /**
3484 * RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution
3485 offset 1368 bit 4 */
3486 bool alwaysInstantRpm : 1 {};
3487 /**
3488 offset 1368 bit 5 */
3489 bool isMapAveragingEnabled : 1 {};
3490 /**
3491 * 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.
3492 offset 1368 bit 6 */
3493 bool useSeparateAdvanceForIdle : 1 {};
3494 /**
3495 offset 1368 bit 7 */
3496 bool isWaveAnalyzerEnabled : 1 {};
3497 /**
3498 * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
3499 offset 1368 bit 8 */
3500 bool useSeparateVeForIdle : 1 {};
3501 /**
3502 * Verbose info in console below engineSnifferRpmThreshold
3503 offset 1368 bit 9 */
3504 bool verboseTriggerSynchDetails : 1 {};
3505 /**
3506 offset 1368 bit 10 */
3507 bool hondaK : 1 {};
3508 /**
3509 * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
3510 offset 1368 bit 11 */
3511 bool twoWireBatchIgnition : 1 {};
3512 /**
3513 * Read MAP sensor on ECU start-up to use as baro value.
3514 offset 1368 bit 12 */
3515 bool useFixedBaroCorrFromMap : 1 {};
3516 /**
3517 * In Constant mode, timing is automatically tapered to running as RPM increases.
3518 * In Table mode, the "Cranking ignition advance" table is used directly.
3519 offset 1368 bit 13 */
3521 /**
3522 * This enables the various ignition corrections during cranking (IAT, CLT and PID idle).
3523 * You probably don't need this.
3524 offset 1368 bit 14 */
3526 /**
3527 * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
3528 offset 1368 bit 15 */
3529 bool flexCranking : 1 {};
3530 /**
3531 * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
3532 offset 1368 bit 16 */
3533 bool useIacPidMultTable : 1 {};
3534 /**
3535 offset 1368 bit 17 */
3536 bool isBoostControlEnabled : 1 {};
3537 /**
3538 * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
3539 offset 1368 bit 18 */
3540 bool launchSmoothRetard : 1 {};
3541 /**
3542 * Some engines are OK running semi-random sequential while other engine require phase synchronization
3543 offset 1368 bit 19 */
3545 /**
3546 * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
3547 offset 1368 bit 20 */
3548 bool useCltBasedRpmLimit : 1 {};
3549 /**
3550 * If enabled, don't wait for engine start to heat O2 sensors.
3551 * WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
3552 offset 1368 bit 21 */
3553 bool forceO2Heating : 1 {};
3554 /**
3555 * 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'.
3556 offset 1368 bit 22 */
3557 bool invertVvtControlIntake : 1 {};
3558 /**
3559 * 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'.
3560 offset 1368 bit 23 */
3561 bool invertVvtControlExhaust : 1 {};
3562 /**
3563 offset 1368 bit 24 */
3564 bool useBiQuadOnAuxSpeedSensors : 1 {};
3565 /**
3566 * '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.
3567 offset 1368 bit 25 */
3568 bool sdTriggerLog : 1 {};
3569 /**
3570 offset 1368 bit 26 */
3571 bool stepper_dc_use_two_wires : 1 {};
3572 /**
3573 offset 1368 bit 27 */
3574 bool watchOutForLinearTime : 1 {};
3575 /**
3576 offset 1368 bit 28 */
3577 bool unusedBit_527_28 : 1 {};
3578 /**
3579 offset 1368 bit 29 */
3580 bool unusedBit_527_29 : 1 {};
3581 /**
3582 offset 1368 bit 30 */
3583 bool unusedBit_527_30 : 1 {};
3584 /**
3585 offset 1368 bit 31 */
3586 bool unusedBit_527_31 : 1 {};
3587 /**
3588 * units: count
3589 * offset 1372
3590 */
3591 uint32_t engineChartSize;
3592 /**
3593 * units: mult
3594 * offset 1376
3595 */
3597 /**
3598 * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
3599 * units: RPM
3600 * offset 1380
3601 */
3602 int16_t acIdleRpmTarget;
3603 /**
3604 * set warningPeriod X
3605 * units: seconds
3606 * offset 1382
3607 */
3608 int16_t warningPeriod;
3609 /**
3610 * units: angle
3611 * offset 1384
3612 */
3614 /**
3615 * units: ms
3616 * offset 1388
3617 */
3619 /**
3620 * units: count
3621 * offset 1392
3622 */
3624 /**
3625 * Pedal position to realize that we need to reduce torque when the trigger pin is triggered
3626 * offset 1396
3627 */
3629 /**
3630 * offset 1400
3631 */
3633 /**
3634 * offset 1404
3635 */
3637 /**
3638 * offset 1408
3639 */
3641 /**
3642 * Duration in ms or duty cycle depending on selected mode
3643 * offset 1412
3644 */
3646 /**
3647 * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
3648 * units: Seconds
3649 * offset 1416
3650 */
3651 float wwaeTau;
3652 /**
3653 * offset 1420
3654 */
3656 /**
3657 * offset 1440
3658 */
3659 pid_s etb;
3660 /**
3661 * RPM range above upper limit for extra air taper
3662 * units: RPM
3663 * offset 1460
3664 */
3665 int16_t airTaperRpmRange;
3666 /**
3667 * offset 1462
3668 */
3670 /**
3671 * Closed voltage for primary throttle position sensor
3672 * offset 1464
3673 */
3675 /**
3676 * Fully opened voltage for primary throttle position sensor
3677 * offset 1466
3678 */
3680 /**
3681 * See also startStopButtonPin
3682 * offset 1468
3683 */
3685 /**
3686 * offset 1470
3687 */
3689 /**
3690 * need 4 byte alignment
3691 * units: units
3692 * offset 1471
3693 */
3694 uint8_t alignmentFill_at_1471[1] = {};
3695 /**
3696 * offset 1472
3697 */
3699 /**
3700 * offset 1474
3701 */
3702 scaled_channel<uint16_t, 1000, 1> tachPulsePerRev;
3703 /**
3704 * kPa/psi value which is too low to be true
3705 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
3706 * offset 1476
3707 */
3709 /**
3710 * kPa/psi value which is too high to be true
3711 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
3712 * offset 1480
3713 */
3715 /**
3716 * How long to wait for the spark to fire before recharging the coil for another spark.
3717 * units: ms
3718 * offset 1484
3719 */
3720 scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
3721 /**
3722 * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
3723 * units: ms
3724 * offset 1486
3725 */
3726 scaled_channel<uint16_t, 1000, 1> multisparkDwell;
3727 /**
3728 * See cltIdleRpmBins
3729 * offset 1488
3730 */
3732 /**
3733 * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
3734 * units: Fraction
3735 * offset 1508
3736 */
3737 float wwaeBeta;
3738 /**
3739 * See also EFI_CONSOLE_RX_BRAIN_PIN
3740 * offset 1512
3741 */
3743 /**
3744 * offset 1514
3745 */
3747 /**
3748 * offset 1516
3749 */
3750 Gpio auxValves[AUX_DIGITAL_VALVE_COUNT] = {};
3751 /**
3752 * offset 1520
3753 */
3755 /**
3756 * offset 1522
3757 */
3759 /**
3760 * units: volts
3761 * offset 1524
3762 */
3764 /**
3765 * Pedal in the floor
3766 * units: volts
3767 * offset 1528
3768 */
3770 /**
3771 * on IGN voltage detection turn fuel pump on to build fuel pressure
3772 * units: seconds
3773 * offset 1532
3774 */
3776 /**
3777 * larger value = larger intake manifold volume
3778 * offset 1534
3779 */
3780 uint16_t mafFilterParameter;
3781 /**
3782 * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
3783 * units: RPM
3784 * offset 1536
3785 */
3786 int16_t idlePidRpmDeadZone;
3787 /**
3788 * need 4 byte alignment
3789 * units: units
3790 * offset 1538
3791 */
3792 uint8_t alignmentFill_at_1538[2] = {};
3793 /**
3794 * See Over/Undervoltage Shutdown/Retry bit in documentation
3795 offset 1540 bit 0 */
3796 bool mc33810DisableRecoveryMode : 1 {};
3797 /**
3798 offset 1540 bit 1 */
3799 bool mc33810Gpgd0Mode : 1 {};
3800 /**
3801 offset 1540 bit 2 */
3802 bool mc33810Gpgd1Mode : 1 {};
3803 /**
3804 offset 1540 bit 3 */
3805 bool mc33810Gpgd2Mode : 1 {};
3806 /**
3807 offset 1540 bit 4 */
3808 bool mc33810Gpgd3Mode : 1 {};
3809 /**
3810 * Send out board statistics
3811 offset 1540 bit 5 */
3812 bool enableExtendedCanBroadcast : 1 {};
3813 /**
3814 * global_can_data performance hack
3815 offset 1540 bit 6 */
3816 bool luaCanRxWorkaround : 1 {};
3817 /**
3818 offset 1540 bit 7 */
3819 bool flexSensorInverted : 1 {};
3820 /**
3821 offset 1540 bit 8 */
3822 bool useHardSkipInTraction : 1 {};
3823 /**
3824 * Use Aux Speed 1 as one of speeds for wheel slip ratio?
3825 offset 1540 bit 9 */
3826 bool useAuxSpeedForSlipRatio : 1 {};
3827 /**
3828 * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
3829 offset 1540 bit 10 */
3830 bool useVssAsSecondWheelSpeed : 1 {};
3831 /**
3832 offset 1540 bit 11 */
3833 bool is_enabled_spi_5 : 1 {};
3834 /**
3835 offset 1540 bit 12 */
3836 bool is_enabled_spi_6 : 1 {};
3837 /**
3838 * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
3839 offset 1540 bit 13 */
3840 bool enableAemXSeriesEgt : 1 {};
3841 /**
3842 offset 1540 bit 14 */
3843 bool startRequestPinInverted : 1 {};
3844 /**
3845 offset 1540 bit 15 */
3846 bool tcu_rangeSensorPulldown : 1 {};
3847 /**
3848 offset 1540 bit 16 */
3849 bool devBit01 : 1 {};
3850 /**
3851 offset 1540 bit 17 */
3852 bool devBit0 : 1 {};
3853 /**
3854 offset 1540 bit 18 */
3855 bool devBit1 : 1 {};
3856 /**
3857 offset 1540 bit 19 */
3858 bool devBit2 : 1 {};
3859 /**
3860 offset 1540 bit 20 */
3861 bool devBit3 : 1 {};
3862 /**
3863 offset 1540 bit 21 */
3864 bool devBit4 : 1 {};
3865 /**
3866 offset 1540 bit 22 */
3867 bool devBit5 : 1 {};
3868 /**
3869 offset 1540 bit 23 */
3870 bool devBit6 : 1 {};
3871 /**
3872 offset 1540 bit 24 */
3873 bool devBit7 : 1 {};
3874 /**
3875 offset 1540 bit 25 */
3876 bool invertExhaustCamVVTSignal : 1 {};
3877 /**
3878 * "Available via TS Plugin see https://rusefi.com/s/knock"
3879 offset 1540 bit 26 */
3880 bool enableKnockSpectrogram : 1 {};
3881 /**
3882 offset 1540 bit 27 */
3883 bool enableKnockSpectrogramFilter : 1 {};
3884 /**
3885 offset 1540 bit 28 */
3886 bool unusedBit_600_28 : 1 {};
3887 /**
3888 offset 1540 bit 29 */
3889 bool unusedBit_600_29 : 1 {};
3890 /**
3891 offset 1540 bit 30 */
3892 bool unusedBit_600_30 : 1 {};
3893 /**
3894 offset 1540 bit 31 */
3895 bool unusedBit_600_31 : 1 {};
3896 /**
3897 * This value is an added for base idle value. Idle Value added when coasting and transitioning into idle.
3898 * units: percent
3899 * offset 1544
3900 */
3901 int16_t iacByTpsTaper;
3902 /**
3903 * offset 1546
3904 */
3906 /**
3907 * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
3908 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
3909 * offset 1548
3910 */
3911 uint8_t coastingFuelCutVssLow;
3912 /**
3913 * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
3914 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
3915 * offset 1549
3916 */
3917 uint8_t coastingFuelCutVssHigh;
3918 /**
3919 * need 4 byte alignment
3920 * units: units
3921 * offset 1550
3922 */
3923 uint8_t alignmentFill_at_1550[2] = {};
3924 /**
3925 * 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.
3926 * units: roc
3927 * offset 1552
3928 */
3930 /**
3931 * offset 1556
3932 */
3933 brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT] = {};
3934 /**
3935 * offset 1560
3936 */
3937 uint8_t totalGearsCount;
3938 /**
3939 * Defines when fuel is injected relative to the intake valve opening. Options include End of Injection or other timing references.
3940 * offset 1561
3941 */
3943 /**
3944 * See http://rusefi.com/s/debugmode
3945 * offset 1562
3946 */
3948 /**
3949 * Additional idle % when fan #1 is active
3950 * units: %
3951 * offset 1563
3952 */
3953 uint8_t fan1ExtraIdle;
3954 /**
3955 * Band rate for primary TTL
3956 * units: BPs
3957 * offset 1564
3958 */
3959 uint32_t uartConsoleSerialSpeed;
3960 /**
3961 * units: volts
3962 * offset 1568
3963 */
3965 /**
3966 * Pedal in the floor
3967 * units: volts
3968 * offset 1572
3969 */
3971 /**
3972 * offset 1576
3973 */
3975 /**
3976 * Override the Y axis (load) value used for the VE table.
3977 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3978 * offset 1577
3979 */
3981 /**
3982 * offset 1578
3983 */
3985 /**
3986 * Override the Y axis (load) value used for the AFR table.
3987 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3988 * offset 1579
3989 */
3991 /**
3992 * units: A
3993 * offset 1580
3994 */
3995 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3996 /**
3997 * units: A
3998 * offset 1581
3999 */
4000 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
4001 /**
4002 * How long to deactivate power when hold current is reached before applying power again
4003 * units: us
4004 * offset 1582
4005 */
4006 uint8_t mc33_hpfp_i_hold_off;
4007 /**
4008 * Maximum amount of time the solenoid can be active before assuming a programming error
4009 * units: ms
4010 * offset 1583
4011 */
4012 uint8_t mc33_hpfp_max_hold;
4013 /**
4014 * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
4015 offset 1584 bit 0 */
4016 bool stepperDcInvertedPins : 1 {};
4017 /**
4018 * Allow OpenBLT on Primary CAN
4019 offset 1584 bit 1 */
4020 bool canOpenBLT : 1 {};
4021 /**
4022 * Allow OpenBLT on Secondary CAN
4023 offset 1584 bit 2 */
4024 bool can2OpenBLT : 1 {};
4025 /**
4026 * Select whether to configure injector flow in volumetric flow (default, cc/min) or mass flow (g/s).
4027 offset 1584 bit 3 */
4028 bool injectorFlowAsMassFlow : 1 {};
4029 /**
4030 offset 1584 bit 4 */
4031 bool boardUseCanTerminator : 1 {};
4032 /**
4033 offset 1584 bit 5 */
4034 bool kLineDoHondaSend : 1 {};
4035 /**
4036 * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
4037 offset 1584 bit 6 */
4038 bool can1ListenMode : 1 {};
4039 /**
4040 offset 1584 bit 7 */
4041 bool can2ListenMode : 1 {};
4042 /**
4043 offset 1584 bit 8 */
4044 bool unusedBit_634_8 : 1 {};
4045 /**
4046 offset 1584 bit 9 */
4047 bool unusedBit_634_9 : 1 {};
4048 /**
4049 offset 1584 bit 10 */
4050 bool unusedBit_634_10 : 1 {};
4051 /**
4052 offset 1584 bit 11 */
4053 bool unusedBit_634_11 : 1 {};
4054 /**
4055 offset 1584 bit 12 */
4056 bool unusedBit_634_12 : 1 {};
4057 /**
4058 offset 1584 bit 13 */
4059 bool unusedBit_634_13 : 1 {};
4060 /**
4061 offset 1584 bit 14 */
4062 bool unusedBit_634_14 : 1 {};
4063 /**
4064 offset 1584 bit 15 */
4065 bool unusedBit_634_15 : 1 {};
4066 /**
4067 offset 1584 bit 16 */
4068 bool unusedBit_634_16 : 1 {};
4069 /**
4070 offset 1584 bit 17 */
4071 bool unusedBit_634_17 : 1 {};
4072 /**
4073 offset 1584 bit 18 */
4074 bool unusedBit_634_18 : 1 {};
4075 /**
4076 offset 1584 bit 19 */
4077 bool unusedBit_634_19 : 1 {};
4078 /**
4079 offset 1584 bit 20 */
4080 bool unusedBit_634_20 : 1 {};
4081 /**
4082 offset 1584 bit 21 */
4083 bool unusedBit_634_21 : 1 {};
4084 /**
4085 offset 1584 bit 22 */
4086 bool unusedBit_634_22 : 1 {};
4087 /**
4088 offset 1584 bit 23 */
4089 bool unusedBit_634_23 : 1 {};
4090 /**
4091 offset 1584 bit 24 */
4092 bool unusedBit_634_24 : 1 {};
4093 /**
4094 offset 1584 bit 25 */
4095 bool unusedBit_634_25 : 1 {};
4096 /**
4097 offset 1584 bit 26 */
4098 bool unusedBit_634_26 : 1 {};
4099 /**
4100 offset 1584 bit 27 */
4101 bool unusedBit_634_27 : 1 {};
4102 /**
4103 offset 1584 bit 28 */
4104 bool unusedBit_634_28 : 1 {};
4105 /**
4106 offset 1584 bit 29 */
4107 bool unusedBit_634_29 : 1 {};
4108 /**
4109 offset 1584 bit 30 */
4110 bool unusedBit_634_30 : 1 {};
4111 /**
4112 offset 1584 bit 31 */
4113 bool unusedBit_634_31 : 1 {};
4114 /**
4115 * Angle of tooth detection within engine phase cycle
4116 * units: angle
4117 * offset 1588
4118 */
4119 uint16_t camDecoder2jzPosition;
4120 /**
4121 * offset 1590
4122 */
4124 /**
4125 * need 4 byte alignment
4126 * units: units
4127 * offset 1591
4128 */
4129 uint8_t alignmentFill_at_1591[1] = {};
4130 /**
4131 * Duration of each test pulse
4132 * units: ms
4133 * offset 1592
4134 */
4135 scaled_channel<uint16_t, 100, 1> benchTestOnTime;
4136 /**
4137 * units: %
4138 * offset 1594
4139 */
4141 /**
4142 * units: %
4143 * offset 1595
4144 */
4145 scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
4146 /**
4147 * offset 1596
4148 */
4150 /**
4151 * need 4 byte alignment
4152 * units: units
4153 * offset 1597
4154 */
4155 uint8_t alignmentFill_at_1597[1] = {};
4156 /**
4157 * offset 1598
4158 */
4160 /**
4161 * offset 1600
4162 */
4164 /**
4165 * offset 1602
4166 */
4168 /**
4169 * offset 1603
4170 */
4172 /**
4173 * Override the Y axis (load) value used for the ignition table.
4174 * Advanced users only: If you aren't sure you need this, you probably don't need this.
4175 * offset 1604
4176 */
4178 /**
4179 * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
4180 * offset 1605
4181 */
4183 /**
4184 * offset 1606
4185 */
4187 /**
4188 * offset 1608
4189 */
4191 /**
4192 * need 4 byte alignment
4193 * units: units
4194 * offset 1609
4195 */
4196 uint8_t alignmentFill_at_1609[3] = {};
4197 /**
4198 * Specifies the boost pressure allowed before triggering a cut. Setting this to 0 will DISABLE overboost cut.
4199 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
4200 * offset 1612
4201 */
4202 float boostCutPressure;
4203 /**
4204 * units: kg/h
4205 * offset 1616
4206 */
4207 scaled_channel<uint8_t, 1, 5> tchargeBins[16] = {};
4208 /**
4209 * units: ratio
4210 * offset 1632
4211 */
4212 scaled_channel<uint8_t, 100, 1> tchargeValues[16] = {};
4213 /**
4214 * Fixed timing, useful for TDC testing
4215 * units: deg
4216 * offset 1648
4217 */
4218 float fixedTiming;
4219 /**
4220 * MAP voltage for low point
4221 * units: v
4222 * offset 1652
4223 */
4224 float mapLowValueVoltage;
4225 /**
4226 * MAP voltage for low point
4227 * units: v
4228 * offset 1656
4229 */
4230 float mapHighValueVoltage;
4231 /**
4232 * EGO value correction
4233 * units: value
4234 * offset 1660
4235 */
4236 float egoValueShift;
4237 /**
4238 * VVT output solenoid pin for this cam
4239 * offset 1664
4240 */
4241 output_pin_e vvtPins[CAM_INPUTS_COUNT] = {};
4242 /**
4243 * offset 1672
4244 */
4245 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMinTps;
4246 /**
4247 * offset 1673
4248 */
4249 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMaxTps;
4250 /**
4251 * offset 1674
4252 */
4253 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMinTps;
4254 /**
4255 * offset 1675
4256 */
4257 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMaxTps;
4258 /**
4259 * offset 1676
4260 */
4262 /**
4263 * 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.
4264 * units: deg BTDC
4265 * offset 1678
4266 */
4267 int8_t minimumIgnitionTiming;
4268 /**
4269 * 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
4270 * units: deg BTDC
4271 * offset 1679
4272 */
4273 int8_t maximumIgnitionTiming;
4274 /**
4275 * units: Hz
4276 * offset 1680
4277 */
4279 /**
4280 * offset 1684
4281 */
4282 vvt_mode_e vvtMode[CAMS_PER_BANK] = {};
4283 /**
4284 * Additional idle % when fan #2 is active
4285 * units: %
4286 * offset 1686
4287 */
4288 uint8_t fan2ExtraIdle;
4289 /**
4290 * Delay to allow fuel pressure to build before firing the priming pulse.
4291 * units: sec
4292 * offset 1687
4293 */
4294 scaled_channel<uint8_t, 100, 1> primingDelay;
4295 /**
4296 * offset 1688
4297 */
4298 adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT] = {};
4299 /**
4300 * offset 1696
4301 */
4302 output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT] = {};
4303 /**
4304 * offset 1720
4305 */
4307 /**
4308 * offset 1721
4309 */
4311 /**
4312 * None = I have a MAP-referenced fuel pressure regulator
4313 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
4314 * Sensed rail pressure = I have a fuel pressure sensor
4315 * HPFP fuel mass compensation = manual mode for GDI engines
4316 * offset 1722
4317 */
4319 /**
4320 * need 4 byte alignment
4321 * units: units
4322 * offset 1723
4323 */
4324 uint8_t alignmentFill_at_1723[1] = {};
4325 /**
4326 * This is the pressure at which your injector flow is known.
4327 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa/50.7psi here.
4328 * This is gauge pressure/in reference to atmospheric.
4329 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
4330 * offset 1724
4331 */
4333 /**
4334 * offset 1728
4335 */
4337 /**
4338 * offset 1760
4339 */
4341 /**
4342 * units: Deg
4343 * offset 1792
4344 */
4345 int16_t knockSamplingDuration;
4346 /**
4347 * units: Hz
4348 * offset 1794
4349 */
4350 int16_t etbFreq;
4351 /**
4352 * offset 1796
4353 */
4355 /**
4356 * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
4357 * offset 1816
4358 */
4360 /**
4361 * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
4362 * units: %
4363 * offset 1817
4364 */
4365 uint8_t stepperMinDutyCycle;
4366 /**
4367 * Use to limit the max.current through the stepper motor (100% = no limit)
4368 * units: %
4369 * offset 1818
4370 */
4371 uint8_t stepperMaxDutyCycle;
4372 /**
4373 * offset 1819
4374 */
4376 /**
4377 * per-cylinder ignition and fueling timing correction for uneven engines
4378 * units: deg
4379 * offset 1820
4380 */
4381 angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT] = {};
4382 /**
4383 * units: seconds
4384 * offset 1868
4385 */
4387 /**
4388 * Minimum coolant temperature to activate VVT
4389 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4390 * offset 1872
4391 */
4392 int16_t vvtControlMinClt;
4393 /**
4394 * offset 1874
4395 */
4397 /**
4398 * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
4399 * offset 1875
4400 */
4402 /**
4403 * offset 1876
4404 */
4406 /**
4407 * offset 1877
4408 */
4410 /**
4411 * offset 1878
4412 */
4414 /**
4415 * offset 1879
4416 */
4418 /**
4419 * offset 1880
4420 */
4422 /**
4423 * offset 1881
4424 */
4426 /**
4427 * offset 1882
4428 */
4430 /**
4431 * offset 1883
4432 */
4434 /**
4435 * ResetB
4436 * offset 1884
4437 */
4439 /**
4440 * offset 1886
4441 */
4443 /**
4444 * Brake pedal switch
4445 * offset 1888
4446 */
4448 /**
4449 * need 4 byte alignment
4450 * units: units
4451 * offset 1890
4452 */
4453 uint8_t alignmentFill_at_1890[2] = {};
4454 /**
4455 * VVT output PID
4456 * TODO: rename to vvtPid
4457 * offset 1892
4458 */
4459 pid_s auxPid[CAMS_PER_BANK] = {};
4460 /**
4461 * offset 1932
4462 */
4463 float injectorCorrectionPolynomial[8] = {};
4464 /**
4465 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4466 * offset 1964
4467 */
4468 scaled_channel<int16_t, 1, 1> primeBins[PRIME_CURVE_COUNT] = {};
4469 /**
4470 * offset 1980
4471 */
4473 /**
4474 * offset 2000
4475 */
4477 /**
4478 * need 4 byte alignment
4479 * units: units
4480 * offset 2001
4481 */
4482 uint8_t alignmentFill_at_2001[1] = {};
4483 /**
4484 * offset 2002
4485 */
4487 /**
4488 * offset 2004
4489 */
4491 /**
4492 * offset 2006
4493 */
4495 /**
4496 * need 4 byte alignment
4497 * units: units
4498 * offset 2007
4499 */
4500 uint8_t alignmentFill_at_2007[1] = {};
4501 /**
4502 * offset 2008
4503 */
4505 /**
4506 * need 4 byte alignment
4507 * units: units
4508 * offset 2010
4509 */
4510 uint8_t alignmentFill_at_2010[2] = {};
4511 /**
4512 * units: hz
4513 * offset 2012
4514 */
4515 float auxFrequencyFilter;
4516 /**
4517 * offset 2016
4518 */
4519 sent_input_pin_e sentInputPins[SENT_INPUT_COUNT] = {};
4520 /**
4521 * This sets the RPM above which fuel cut is active.
4522 * units: rpm
4523 * offset 2018
4524 */
4525 int16_t coastingFuelCutRpmHigh;
4526 /**
4527 * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
4528 * units: rpm
4529 * offset 2020
4530 */
4531 int16_t coastingFuelCutRpmLow;
4532 /**
4533 * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
4534 * units: %
4535 * offset 2022
4536 */
4537 int16_t coastingFuelCutTps;
4538 /**
4539 * Fuel cutoff is disabled when the engine is cold.
4540 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4541 * offset 2024
4542 */
4543 int16_t coastingFuelCutClt;
4544 /**
4545 * Increases PID reaction for RPM<target by adding extra percent to PID-error
4546 * units: %
4547 * offset 2026
4548 */
4549 int16_t pidExtraForLowRpm;
4550 /**
4551 * MAP value above which fuel injection is re-enabled.
4552 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
4553 * offset 2028
4554 */
4555 int16_t coastingFuelCutMap;
4556 /**
4557 * need 4 byte alignment
4558 * units: units
4559 * offset 2030
4560 */
4561 uint8_t alignmentFill_at_2030[2] = {};
4562 /**
4563 * offset 2032
4564 */
4566 /**
4567 * offset 2052
4568 */
4570 /**
4571 * offset 2072
4572 */
4573 gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT] = {};
4574 /**
4575 * offset 2168
4576 */
4577 gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT] = {};
4578 /**
4579 * offset 2232
4580 */
4581 gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT] = {};
4582 /**
4583 * Heat transfer coefficient at zero flow.
4584 * 0 means the air charge is fully heated to the same temperature as CLT.
4585 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
4586 * offset 2360
4587 */
4588 float tChargeAirCoefMin;
4589 /**
4590 * Heat transfer coefficient at high flow, as defined by "max air flow".
4591 * 0 means the air charge is fully heated to the same temperature as CLT.
4592 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
4593 * offset 2364
4594 */
4595 float tChargeAirCoefMax;
4596 /**
4597 * High flow point for heat transfer estimation.
4598 * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
4599 * units: kg/h
4600 * offset 2368
4601 */
4602 float tChargeAirFlowMax;
4603 /**
4604 * Maximum allowed rate of increase allowed for the estimated charge temperature
4605 * units: deg/sec
4606 * offset 2372
4607 */
4608 float tChargeAirIncrLimit;
4609 /**
4610 * Maximum allowed rate of decrease allowed for the estimated charge temperature
4611 * units: deg/sec
4612 * offset 2376
4613 */
4614 float tChargeAirDecrLimit;
4615 /**
4616 * iTerm min value
4617 * offset 2380
4618 */
4619 int16_t etb_iTermMin;
4620 /**
4621 * iTerm max value
4622 * offset 2382
4623 */
4624 int16_t etb_iTermMax;
4625 /**
4626 * See useIdleTimingPidControl
4627 * offset 2384
4628 */
4630 /**
4631 * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
4632 * offset 2404
4633 */
4635 /**
4636 * offset 2408
4637 */
4639 /**
4640 * offset 2409
4641 */
4643 /**
4644 * A delay in cycles between fuel-enrich. portions
4645 * units: cycles
4646 * offset 2410
4647 */
4648 int16_t tpsAccelFractionPeriod;
4649 /**
4650 * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
4651 * units: coef
4652 * offset 2412
4653 */
4655 /**
4656 * offset 2416
4657 */
4659 /**
4660 * offset 2417
4661 */
4663 /**
4664 * iTerm min value
4665 * offset 2418
4666 */
4667 int16_t idlerpmpid_iTermMin;
4668 /**
4669 * offset 2420
4670 */
4672 /**
4673 * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
4674 * E0 = 14.7
4675 * E10 = 14.1
4676 * E85 = 9.9
4677 * E100 = 9.0
4678 * units: :1
4679 * offset 2421
4680 */
4681 scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
4682 /**
4683 * iTerm max value
4684 * offset 2422
4685 */
4686 int16_t idlerpmpid_iTermMax;
4687 /**
4688 * 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.
4689 * units: %
4690 * offset 2424
4691 */
4693 /**
4694 * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
4695 * offset 2428
4696 */
4697 uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT] = {};
4698 /**
4699 * units: mg
4700 * offset 2440
4701 */
4702 scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT] = {};
4703 /**
4704 * Trigger comparator center point voltage
4705 * units: V
4706 * offset 2448
4707 */
4708 scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
4709 /**
4710 * Trigger comparator hysteresis voltage (Min)
4711 * units: V
4712 * offset 2449
4713 */
4714 scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
4715 /**
4716 * Trigger comparator hysteresis voltage (Max)
4717 * units: V
4718 * offset 2450
4719 */
4720 scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
4721 /**
4722 * VR-sensor saturation RPM
4723 * units: RPM
4724 * offset 2451
4725 */
4726 scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
4727 /**
4728 * units: ratio
4729 * offset 2452
4730 */
4731 scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
4732 /**
4733 * units: RPM
4734 * offset 2464
4735 */
4736 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4737 /**
4738 * offset 2470
4739 */
4741 /**
4742 * need 4 byte alignment
4743 * units: units
4744 * offset 2471
4745 */
4746 uint8_t alignmentFill_at_2471[1] = {};
4747 /**
4748 * offset 2472
4749 */
4750 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
4751 /**
4752 * Boost Current
4753 * units: mA
4754 * offset 2904
4755 */
4756 uint16_t mc33_i_boost;
4757 /**
4758 * Peak Current
4759 * units: mA
4760 * offset 2906
4761 */
4762 uint16_t mc33_i_peak;
4763 /**
4764 * Hold Current
4765 * units: mA
4766 * offset 2908
4767 */
4768 uint16_t mc33_i_hold;
4769 /**
4770 * 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.
4771 * units: us
4772 * offset 2910
4773 */
4774 uint16_t mc33_t_max_boost;
4775 /**
4776 * units: us
4777 * offset 2912
4778 */
4779 uint16_t mc33_t_peak_off;
4780 /**
4781 * Peak phase duration
4782 * units: us
4783 * offset 2914
4784 */
4785 uint16_t mc33_t_peak_tot;
4786 /**
4787 * units: us
4788 * offset 2916
4789 */
4790 uint16_t mc33_t_bypass;
4791 /**
4792 * units: us
4793 * offset 2918
4794 */
4795 uint16_t mc33_t_hold_off;
4796 /**
4797 * Hold phase duration
4798 * units: us
4799 * offset 2920
4800 */
4801 uint16_t mc33_t_hold_tot;
4802 /**
4803 * offset 2922
4804 */
4806 /**
4807 * offset 2923
4808 */
4810 /**
4811 * offset 2924
4812 */
4814 /**
4815 * offset 2925
4816 */
4817 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
4818 /**
4819 * need 4 byte alignment
4820 * units: units
4821 * offset 2931
4822 */
4823 uint8_t alignmentFill_at_2931[1] = {};
4824 /**
4825 * units: ratio
4826 * offset 2932
4827 */
4828 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
4829 /**
4830 * units: ratio
4831 * offset 3004
4832 */
4833 float triggerGapOverrideTo[GAP_TRACKING_LENGTH] = {};
4834 /**
4835 * 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.
4836 * units: rpm
4837 * offset 3076
4838 */
4839 scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
4840 /**
4841 * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
4842 * units: sec
4843 * offset 3077
4844 */
4845 scaled_channel<uint8_t, 10, 1> dfcoDelay;
4846 /**
4847 * 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.
4848 * units: sec
4849 * offset 3078
4850 */
4851 scaled_channel<uint8_t, 10, 1> acDelay;
4852 /**
4853 * offset 3079
4854 */
4856 /**
4857 * units: mg
4858 * offset 3080
4859 */
4860 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
4861 /**
4862 * 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.
4863 * units: %
4864 * offset 3082
4865 */
4866 uint8_t etbJamDetectThreshold;
4867 /**
4868 * units: lobes/cam
4869 * offset 3083
4870 */
4871 uint8_t hpfpCamLobes;
4872 /**
4873 * offset 3084
4874 */
4876 /**
4877 * Low engine speed for A/C. Larger engines can survive lower values
4878 * units: RPM
4879 * offset 3085
4880 */
4881 scaled_channel<int8_t, 1, 10> acLowRpmLimit;
4882 /**
4883 * If the requested activation time is below this angle, don't bother running the pump
4884 * units: deg
4885 * offset 3086
4886 */
4887 uint8_t hpfpMinAngle;
4888 /**
4889 * need 4 byte alignment
4890 * units: units
4891 * offset 3087
4892 */
4893 uint8_t alignmentFill_at_3087[1] = {};
4894 /**
4895 * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
4896 * units: cc
4897 * offset 3088
4898 */
4899 scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
4900 /**
4901 * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
4902 * https://rusefi.com/forum/viewtopic.php?t=2192
4903 * units: deg
4904 * offset 3090
4905 */
4906 uint8_t hpfpActivationAngle;
4907 /**
4908 * offset 3091
4909 */
4910 uint8_t issFilterReciprocal;
4911 /**
4912 * units: %/kPa
4913 * offset 3092
4914 */
4915 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
4916 /**
4917 * units: %/kPa/lobe
4918 * offset 3094
4919 */
4920 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
4921 /**
4922 * iTerm min value
4923 * offset 3096
4924 */
4925 int16_t hpfpPid_iTermMin;
4926 /**
4927 * iTerm max value
4928 * offset 3098
4929 */
4930 int16_t hpfpPid_iTermMax;
4931 /**
4932 * 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.
4933 * units: kPa/s
4934 * offset 3100
4935 */
4936 uint16_t hpfpTargetDecay;
4937 /**
4938 * offset 3102
4939 */
4941 /**
4942 * units: ratio
4943 * offset 3110
4944 */
4945 scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT] = {};
4946 /**
4947 * We need to give engine time to build oil pressure without diverting it to VVT
4948 * units: ms
4949 * offset 3130
4950 */
4951 uint16_t vvtActivationDelayMs;
4952 /**
4953 * offset 3132
4954 */
4956 /**
4957 * offset 3133
4958 */
4960 /**
4961 * During revolution where ACR should be disabled at what specific angle to disengage
4962 * units: deg
4963 * offset 3134
4964 */
4965 uint16_t acrDisablePhase;
4966 /**
4967 * offset 3136
4968 */
4970 /**
4971 * offset 3156
4972 */
4974 /**
4975 * offset 3176
4976 */
4978 /**
4979 * offset 3178
4980 */
4982 /**
4983 * need 4 byte alignment
4984 * units: units
4985 * offset 3179
4986 */
4987 uint8_t alignmentFill_at_3179[1] = {};
4988 /**
4989 * offset 3180
4990 */
4992 /**
4993 * offset 3182
4994 */
4996 /**
4997 * need 4 byte alignment
4998 * units: units
4999 * offset 3183
5000 */
5001 uint8_t alignmentFill_at_3183[1] = {};
5002 /**
5003 * offset 3184
5004 */
5006 /**
5007 * offset 3186
5008 */
5010 /**
5011 * offset 3188
5012 */
5014 /**
5015 * need 4 byte alignment
5016 * units: units
5017 * offset 3189
5018 */
5019 uint8_t alignmentFill_at_3189[1] = {};
5020 /**
5021 * offset 3190
5022 */
5024 /**
5025 * offset 3192
5026 */
5028 /**
5029 * offset 3194
5030 */
5032 /**
5033 * need 4 byte alignment
5034 * units: units
5035 * offset 3195
5036 */
5037 uint8_t alignmentFill_at_3195[1] = {};
5038 /**
5039 * offset 3196
5040 */
5042 /**
5043 * offset 3198
5044 */
5046 /**
5047 * Set a minimum allowed target position to avoid slamming/driving against the hard mechanical stop in the throttle.
5048 * units: %
5049 * offset 3200
5050 */
5051 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
5052 /**
5053 * need 4 byte alignment
5054 * units: units
5055 * offset 3201
5056 */
5057 uint8_t alignmentFill_at_3201[1] = {};
5058 /**
5059 * offset 3202
5060 */
5061 uint16_t tuneHidingKey;
5062 /**
5063 * Individual characters are accessible using vin(index) Lua function
5064 * offset 3204
5065 */
5067 /**
5068 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5069 * offset 3221
5070 */
5072 /**
5073 * offset 3222
5074 */
5076 /**
5077 * need 4 byte alignment
5078 * units: units
5079 * offset 3223
5080 */
5081 uint8_t alignmentFill_at_3223[1] = {};
5082 /**
5083 * offset 3224
5084 */
5085 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
5086 /**
5087 * units: rpm
5088 * offset 3240
5089 */
5090 int16_t ALSMinRPM;
5091 /**
5092 * units: rpm
5093 * offset 3242
5094 */
5095 int16_t ALSMaxRPM;
5096 /**
5097 * units: sec
5098 * offset 3244
5099 */
5100 int16_t ALSMaxDuration;
5101 /**
5102 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5103 * offset 3246
5104 */
5105 int8_t ALSMinCLT;
5106 /**
5107 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5108 * offset 3247
5109 */
5110 int8_t ALSMaxCLT;
5111 /**
5112 * offset 3248
5113 */
5114 uint8_t alsMinTimeBetween;
5115 /**
5116 * offset 3249
5117 */
5118 uint8_t alsEtbPosition;
5119 /**
5120 * units: %
5121 * offset 3250
5122 */
5124 /**
5125 * If you have digital SENT TPS sensor please select type. For analog TPS leave None
5126 * offset 3251
5127 */
5129 /**
5130 * offset 3252
5131 */
5132 uint16_t customSentTpsMin;
5133 /**
5134 * need 4 byte alignment
5135 * units: units
5136 * offset 3254
5137 */
5138 uint8_t alignmentFill_at_3254[2] = {};
5139 /**
5140 * units: %
5141 * offset 3256
5142 */
5143 int ALSIdleAdd;
5144 /**
5145 * units: %
5146 * offset 3260
5147 */
5148 int ALSEtbAdd;
5149 /**
5150 * offset 3264
5151 */
5152 float ALSSkipRatio;
5153 /**
5154 * 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
5155 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5156 * offset 3268
5157 */
5158 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
5159 /**
5160 * offset 3269
5161 */
5163 /**
5164 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
5165 * units: %
5166 * offset 3270
5167 */
5168 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
5169 /**
5170 * For Toyota ETCS-i, use ~69%
5171 * units: %
5172 * offset 3271
5173 */
5174 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
5175 /**
5176 * offset 3272
5177 */
5178 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
5179 /**
5180 * offset 3280
5181 */
5182 uint16_t customSentTpsMax;
5183 /**
5184 * offset 3282
5185 */
5186 uint16_t kLineBaudRate;
5187 /**
5188 * offset 3284
5189 */
5191 /**
5192 * offset 3285
5193 */
5194 UiMode uiMode;
5195 /**
5196 * Crank angle ATDC of first lobe peak
5197 * units: deg
5198 * offset 3286
5199 */
5200 int16_t hpfpPeakPos;
5201 /**
5202 * units: us
5203 * offset 3288
5204 */
5205 int16_t kLinePeriodUs;
5206 /**
5207 * Degrees of timing REMOVED from actual timing during soft RPM limit window
5208 * units: deg
5209 * offset 3290
5210 */
5211 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
5212 /**
5213 * % of fuel ADDED during window
5214 * units: %
5215 * offset 3291
5216 */
5217 scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
5218 /**
5219 * 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.
5220 * 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
5221 * units: RPM
5222 * offset 3292
5223 */
5224 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
5225 /**
5226 * need 4 byte alignment
5227 * units: units
5228 * offset 3293
5229 */
5230 uint8_t alignmentFill_at_3293[1] = {};
5231 /**
5232 * Time between bench test pulses
5233 * units: ms
5234 * offset 3294
5235 */
5236 scaled_channel<uint16_t, 10, 1> benchTestOffTime;
5237 /**
5238 * Defines a pressure range below the cut limit at which boost can resume, providing smoother control over boost cut actions.
5239 * 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
5240 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5241 * offset 3296
5242 */
5243 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
5244 /**
5245 * Boost duty cycle modified by gear
5246 * units: %
5247 * offset 3297
5248 */
5249 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
5250 /**
5251 * need 4 byte alignment
5252 * units: units
5253 * offset 3307
5254 */
5255 uint8_t alignmentFill_at_3307[1] = {};
5256 /**
5257 * How many test bench pulses do you want
5258 * offset 3308
5259 */
5260 uint32_t benchTestCount;
5261 /**
5262 * How long initial idle adder is held before starting to decay.
5263 * units: seconds
5264 * offset 3312
5265 */
5266 scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
5267 /**
5268 * How long it takes to remove initial IAC adder to return to normal idle.
5269 * units: seconds
5270 * offset 3313
5271 */
5272 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
5273 /**
5274 * offset 3314
5275 */
5276 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
5277 /**
5278 * offset 3326
5279 */
5280 pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT] = {};
5281 /**
5282 * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
5283 * units: ratio
5284 * offset 3332
5285 */
5286 scaled_channel<uint16_t, 10000, 1> canVssScaling;
5287 /**
5288 * need 4 byte alignment
5289 * units: units
5290 * offset 3334
5291 */
5292 uint8_t alignmentFill_at_3334[2] = {};
5293 /**
5294 * offset 3336
5295 */
5297 /**
5298 * offset 3368
5299 */
5301 /**
5302 * offset 3400
5303 */
5305 /**
5306 * offset 3432
5307 */
5309 /**
5310 * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
5311 * offset 3464
5312 */
5314 /**
5315 * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
5316 * offset 3465
5317 */
5319 /**
5320 * offset 3466
5321 */
5322 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
5323 /**
5324 * offset 3470
5325 */
5327 /**
5328 * Number of speedometer pulses per kilometer travelled.
5329 * offset 3472
5330 */
5331 uint16_t speedometerPulsePerKm;
5332 /**
5333 * offset 3474
5334 */
5335 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
5336 /**
5337 * offset 3478
5338 */
5340 /**
5341 * need 4 byte alignment
5342 * units: units
5343 * offset 3479
5344 */
5345 uint8_t alignmentFill_at_3479[1] = {};
5346 /**
5347 * offset 3480
5348 */
5349 float ignKeyAdcDivider;
5350 /**
5351 * offset 3484
5352 */
5354 /**
5355 * need 4 byte alignment
5356 * units: units
5357 * offset 3485
5358 */
5359 uint8_t alignmentFill_at_3485[3] = {};
5360 /**
5361 * units: ratio
5362 * offset 3488
5363 */
5364 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
5365 /**
5366 * units: ratio
5367 * offset 3504
5368 */
5369 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
5370 /**
5371 * units: %
5372 * offset 3520
5373 */
5374 int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5375 /**
5376 * This sets an immediate limit on injector duty cycle. If this threshold is reached, the system will immediately cut the injectors.
5377 * units: %
5378 * offset 3556
5379 */
5380 uint8_t maxInjectorDutyInstant;
5381 /**
5382 * 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.
5383 * units: %
5384 * offset 3557
5385 */
5387 /**
5388 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
5389 * units: sec
5390 * offset 3558
5391 */
5392 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
5393 /**
5394 * need 4 byte alignment
5395 * units: units
5396 * offset 3559
5397 */
5398 uint8_t alignmentFill_at_3559[1] = {};
5399 /**
5400 * offset 3560
5401 */
5402 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
5403 /**
5404 * units: Deg
5405 * offset 3584
5406 */
5407 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5408 /**
5409 * units: %
5410 * offset 3620
5411 */
5412 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5413 /**
5414 * offset 3656
5415 */
5416 float auxSpeed1Multiplier;
5417 /**
5418 * offset 3660
5419 */
5421 /**
5422 * offset 3664
5423 */
5425 /**
5426 * offset 3666
5427 */
5429 /**
5430 * offset 3668
5431 */
5433 /**
5434 * offset 3670
5435 */
5437 /**
5438 * offset 3672
5439 */
5441 /**
5442 * offset 3674
5443 */
5445 /**
5446 * offset 3676
5447 */
5449 /**
5450 * offset 3678
5451 */
5453 /**
5454 * offset 3680
5455 */
5457 /**
5458 * offset 3682
5459 */
5461 /**
5462 * offset 3683
5463 */
5465 /**
5466 * offset 3684
5467 */
5469 /**
5470 * offset 3685
5471 */
5473 /**
5474 * offset 3686
5475 */
5477 /**
5478 * offset 3687
5479 */
5481 /**
5482 * offset 3688
5483 */
5485 /**
5486 * offset 3689
5487 */
5489 /**
5490 * need 4 byte alignment
5491 * units: units
5492 * offset 3690
5493 */
5494 uint8_t alignmentFill_at_3690[2] = {};
5495 /**
5496 * Secondary TTL channel baud rate
5497 * units: BPs
5498 * offset 3692
5499 */
5500 uint32_t tunerStudioSerialSpeed;
5501 /**
5502 * offset 3696
5503 */
5505 /**
5506 * offset 3698
5507 */
5509 /**
5510 * need 4 byte alignment
5511 * units: units
5512 * offset 3699
5513 */
5514 uint8_t alignmentFill_at_3699[1] = {};
5515 /**
5516 * offset 3700
5517 */
5518 int anotherCiTest;
5519 /**
5520 * offset 3704
5521 */
5522 uint32_t device_uid[3] = {};
5523 /**
5524 * offset 3716
5525 */
5526 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
5527 /**
5528 * need 4 byte alignment
5529 * units: units
5530 * offset 3722
5531 */
5532 uint8_t alignmentFill_at_3722[2] = {};
5533 /**
5534 * units: Ohm
5535 * offset 3724
5536 */
5538 /**
5539 * offset 3728
5540 */
5542 /**
5543 * Nominal coil charge current, 0.25A step
5544 * units: A
5545 * offset 3732
5546 */
5547 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
5548 /**
5549 * Maximum coil charge current, 1A step
5550 * units: A
5551 * offset 3733
5552 */
5553 uint8_t mc33810Maxi;
5554 /**
5555 * need 4 byte alignment
5556 * units: units
5557 * offset 3734
5558 */
5559 uint8_t alignmentFill_at_3734[2] = {};
5560 /**
5561 * offset 3736
5562 */
5564 /**
5565 * value of A/C pressure in kPa/psi before that compressor is disengaged
5566 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5567 * offset 3756
5568 */
5569 uint16_t minAcPressure;
5570 /**
5571 * value of A/C pressure in kPa/psi after that compressor is disengaged
5572 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5573 * offset 3758
5574 */
5575 uint16_t maxAcPressure;
5576 /**
5577 * Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise.
5578 * units: sec
5579 * offset 3760
5580 */
5581 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
5582 /**
5583 * need 4 byte alignment
5584 * units: units
5585 * offset 3761
5586 */
5587 uint8_t alignmentFill_at_3761[3] = {};
5588 /**
5589 * offset 3764
5590 */
5592 /**
5593 * offset 3784
5594 */
5596 /**
5597 * offset 3804
5598 */
5600 /**
5601 * need 4 byte alignment
5602 * units: units
5603 * offset 3805
5604 */
5605 uint8_t alignmentFill_at_3805[1] = {};
5606 /**
5607 * offset 3806
5608 */
5610 /**
5611 * offset 3808
5612 */
5614 /**
5615 * need 4 byte alignment
5616 * units: units
5617 * offset 3810
5618 */
5619 uint8_t alignmentFill_at_3810[2] = {};
5620 /**
5621 offset 3812 bit 0 */
5622 bool can3ListenMode : 1 {};
5623 /**
5624 offset 3812 bit 1 */
5625 bool verboseCan3 : 1 {};
5626 /**
5627 offset 3812 bit 2 */
5628 bool unusedBit_963_2 : 1 {};
5629 /**
5630 offset 3812 bit 3 */
5631 bool unusedBit_963_3 : 1 {};
5632 /**
5633 offset 3812 bit 4 */
5634 bool unusedBit_963_4 : 1 {};
5635 /**
5636 offset 3812 bit 5 */
5637 bool unusedBit_963_5 : 1 {};
5638 /**
5639 offset 3812 bit 6 */
5640 bool unusedBit_963_6 : 1 {};
5641 /**
5642 offset 3812 bit 7 */
5643 bool unusedBit_963_7 : 1 {};
5644 /**
5645 offset 3812 bit 8 */
5646 bool unusedBit_963_8 : 1 {};
5647 /**
5648 offset 3812 bit 9 */
5649 bool unusedBit_963_9 : 1 {};
5650 /**
5651 offset 3812 bit 10 */
5652 bool unusedBit_963_10 : 1 {};
5653 /**
5654 offset 3812 bit 11 */
5655 bool unusedBit_963_11 : 1 {};
5656 /**
5657 offset 3812 bit 12 */
5658 bool unusedBit_963_12 : 1 {};
5659 /**
5660 offset 3812 bit 13 */
5661 bool unusedBit_963_13 : 1 {};
5662 /**
5663 offset 3812 bit 14 */
5664 bool unusedBit_963_14 : 1 {};
5665 /**
5666 offset 3812 bit 15 */
5667 bool unusedBit_963_15 : 1 {};
5668 /**
5669 offset 3812 bit 16 */
5670 bool unusedBit_963_16 : 1 {};
5671 /**
5672 offset 3812 bit 17 */
5673 bool unusedBit_963_17 : 1 {};
5674 /**
5675 offset 3812 bit 18 */
5676 bool unusedBit_963_18 : 1 {};
5677 /**
5678 offset 3812 bit 19 */
5679 bool unusedBit_963_19 : 1 {};
5680 /**
5681 offset 3812 bit 20 */
5682 bool unusedBit_963_20 : 1 {};
5683 /**
5684 offset 3812 bit 21 */
5685 bool unusedBit_963_21 : 1 {};
5686 /**
5687 offset 3812 bit 22 */
5688 bool unusedBit_963_22 : 1 {};
5689 /**
5690 offset 3812 bit 23 */
5691 bool unusedBit_963_23 : 1 {};
5692 /**
5693 offset 3812 bit 24 */
5694 bool unusedBit_963_24 : 1 {};
5695 /**
5696 offset 3812 bit 25 */
5697 bool unusedBit_963_25 : 1 {};
5698 /**
5699 offset 3812 bit 26 */
5700 bool unusedBit_963_26 : 1 {};
5701 /**
5702 offset 3812 bit 27 */
5703 bool unusedBit_963_27 : 1 {};
5704 /**
5705 offset 3812 bit 28 */
5706 bool unusedBit_963_28 : 1 {};
5707 /**
5708 offset 3812 bit 29 */
5709 bool unusedBit_963_29 : 1 {};
5710 /**
5711 offset 3812 bit 30 */
5712 bool unusedBit_963_30 : 1 {};
5713 /**
5714 offset 3812 bit 31 */
5715 bool unusedBit_963_31 : 1 {};
5716 /**
5717 * Below TPS value all knock suppression will be disabled.
5718 * units: %
5719 * offset 3816
5720 */
5721 scaled_channel<uint8_t, 1, 1> knockSuppressMinTps;
5722 /**
5723 * Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
5724 * units: %
5725 * offset 3817
5726 */
5727 scaled_channel<uint8_t, 10, 1> knockFuelTrimAggression;
5728 /**
5729 * After a knock event, reapply fuel at this rate.
5730 * units: 1%/s
5731 * offset 3818
5732 */
5733 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
5734 /**
5735 * Fuel trim when knock, max 30%
5736 * units: %
5737 * offset 3819
5738 */
5739 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
5740 /**
5741 * units: sense
5742 * offset 3820
5743 */
5745 /**
5746 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
5747 * units: Hz
5748 * offset 3824
5749 */
5750 float knockFrequency;
5751 /**
5752 * None = I have a MAP-referenced fuel pressure regulator
5753 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
5754 * Sensed rail pressure = I have a fuel pressure sensor
5755 * offset 3828
5756 */
5758 /**
5759 * need 4 byte alignment
5760 * units: units
5761 * offset 3829
5762 */
5763 uint8_t alignmentFill_at_3829[3] = {};
5764 /**
5765 * This is the pressure at which your injector flow is known.
5766 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
5767 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5768 * offset 3832
5769 */
5771 /**
5772 * SENT input connected to ETB
5773 * offset 3836
5774 */
5776 /**
5777 * SENT input used for high pressure fuel sensor
5778 * offset 3837
5779 */
5781 /**
5782 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
5783 * offset 3838
5784 */
5786 /**
5787 * need 4 byte alignment
5788 * units: units
5789 * offset 3839
5790 */
5791 uint8_t alignmentFill_at_3839[1] = {};
5792 /**
5793 offset 3840 bit 0 */
5794 bool nitrousControlEnabled : 1 {};
5795 /**
5796 offset 3840 bit 1 */
5797 bool vvlControlEnabled : 1 {};
5798 /**
5799 offset 3840 bit 2 */
5800 bool unusedBit_Fancy3 : 1 {};
5801 /**
5802 offset 3840 bit 3 */
5803 bool unusedBit_Fancy4 : 1 {};
5804 /**
5805 offset 3840 bit 4 */
5806 bool unusedBit_Fancy5 : 1 {};
5807 /**
5808 offset 3840 bit 5 */
5809 bool unusedBit_Fancy6 : 1 {};
5810 /**
5811 offset 3840 bit 6 */
5812 bool unusedBit_Fancy7 : 1 {};
5813 /**
5814 offset 3840 bit 7 */
5815 bool unusedBit_Fancy8 : 1 {};
5816 /**
5817 offset 3840 bit 8 */
5818 bool unusedBit_Fancy9 : 1 {};
5819 /**
5820 offset 3840 bit 9 */
5821 bool unusedBit_Fancy10 : 1 {};
5822 /**
5823 offset 3840 bit 10 */
5824 bool unusedBit_Fancy11 : 1 {};
5825 /**
5826 offset 3840 bit 11 */
5827 bool unusedBit_Fancy12 : 1 {};
5828 /**
5829 offset 3840 bit 12 */
5830 bool unusedBit_Fancy13 : 1 {};
5831 /**
5832 offset 3840 bit 13 */
5833 bool unusedBit_Fancy14 : 1 {};
5834 /**
5835 offset 3840 bit 14 */
5836 bool unusedBit_Fancy15 : 1 {};
5837 /**
5838 offset 3840 bit 15 */
5839 bool unusedBit_Fancy16 : 1 {};
5840 /**
5841 offset 3840 bit 16 */
5842 bool unusedBit_Fancy17 : 1 {};
5843 /**
5844 offset 3840 bit 17 */
5845 bool unusedBit_Fancy18 : 1 {};
5846 /**
5847 offset 3840 bit 18 */
5848 bool unusedBit_Fancy19 : 1 {};
5849 /**
5850 offset 3840 bit 19 */
5851 bool unusedBit_Fancy20 : 1 {};
5852 /**
5853 offset 3840 bit 20 */
5854 bool unusedBit_Fancy21 : 1 {};
5855 /**
5856 offset 3840 bit 21 */
5857 bool unusedBit_Fancy22 : 1 {};
5858 /**
5859 offset 3840 bit 22 */
5860 bool unusedBit_Fancy23 : 1 {};
5861 /**
5862 offset 3840 bit 23 */
5863 bool unusedBit_Fancy24 : 1 {};
5864 /**
5865 offset 3840 bit 24 */
5866 bool unusedBit_Fancy25 : 1 {};
5867 /**
5868 offset 3840 bit 25 */
5869 bool unusedBit_Fancy26 : 1 {};
5870 /**
5871 offset 3840 bit 26 */
5872 bool unusedBit_Fancy27 : 1 {};
5873 /**
5874 offset 3840 bit 27 */
5875 bool unusedBit_Fancy28 : 1 {};
5876 /**
5877 offset 3840 bit 28 */
5878 bool unusedBit_Fancy29 : 1 {};
5879 /**
5880 offset 3840 bit 29 */
5881 bool unusedBit_Fancy30 : 1 {};
5882 /**
5883 offset 3840 bit 30 */
5884 bool unusedBit_Fancy31 : 1 {};
5885 /**
5886 offset 3840 bit 31 */
5887 bool unusedBit_Fancy32 : 1 {};
5888 /**
5889 * offset 3844
5890 */
5892 /**
5893 * need 4 byte alignment
5894 * units: units
5895 * offset 3845
5896 */
5897 uint8_t alignmentFill_at_3845[1] = {};
5898 /**
5899 * Pin that activates nitrous control
5900 * offset 3846
5901 */
5903 /**
5904 * offset 3848
5905 */
5907 /**
5908 * offset 3849
5909 */
5911 /**
5912 * offset 3850
5913 */
5915 /**
5916 * need 4 byte alignment
5917 * units: units
5918 * offset 3851
5919 */
5920 uint8_t alignmentFill_at_3851[1] = {};
5921 /**
5922 * offset 3852
5923 */
5925 /**
5926 * offset 3856
5927 */
5929 /**
5930 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5931 * offset 3860
5932 */
5933 int16_t nitrousMinimumClt;
5934 /**
5935 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5936 * offset 3862
5937 */
5938 int16_t nitrousMaximumMap;
5939 /**
5940 * units: afr
5941 * offset 3864
5942 */
5943 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
5944 /**
5945 * need 4 byte alignment
5946 * units: units
5947 * offset 3865
5948 */
5949 uint8_t alignmentFill_at_3865[1] = {};
5950 /**
5951 * units: rpm
5952 * offset 3866
5953 */
5954 uint16_t nitrousActivationRpm;
5955 /**
5956 * units: rpm
5957 * offset 3868
5958 */
5959 uint16_t nitrousDeactivationRpm;
5960 /**
5961 * units: rpm
5962 * offset 3870
5963 */
5965 /**
5966 * 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.
5967 * units: deg
5968 * offset 3872
5969 */
5970 uint8_t dfcoRetardDeg;
5971 /**
5972 * Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
5973 * units: s
5974 * offset 3873
5975 */
5976 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
5977 /**
5978 * offset 3874
5979 */
5981 /**
5982 * offset 3876
5983 */
5985 /**
5986 * units: %
5987 * offset 3877
5988 */
5990 /**
5991 * need 4 byte alignment
5992 * units: units
5993 * offset 3878
5994 */
5995 uint8_t alignmentFill_at_3878[2] = {};
5996 /**
5997 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
5998 * units: deg
5999 * offset 3880
6000 */
6002 /**
6003 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6004 * offset 3884
6005 */
6007 /**
6008 * need 4 byte alignment
6009 * units: units
6010 * offset 3886
6011 */
6012 uint8_t alignmentFill_at_3886[2] = {};
6013 /**
6014 * Exponential Average Alpha filtering parameter
6015 * offset 3888
6016 */
6018 /**
6019 * How often do we update fuel level gauge
6020 * units: seconds
6021 * offset 3892
6022 */
6024 /**
6025 * Error below specified value
6026 * units: v
6027 * offset 3896
6028 */
6030 /**
6031 * Error above specified value
6032 * units: v
6033 * offset 3900
6034 */
6036 /**
6037 * A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.
6038 * '1' means no filtering, 0.98 would be some filtering.
6039 * offset 3904
6040 */
6041 float afrExpAverageAlpha;
6042 /**
6043 * Compensates for trigger delay due to belt stretch, or other electromechanical issues. beware that raising this value advances ignition timing!
6044 * units: uS
6045 * offset 3908
6046 */
6047 scaled_channel<uint8_t, 1, 1> sparkHardwareLatencyCorrection;
6048 /**
6049 * Delay before cutting fuel due to extra high oil pressure. Use this to ignore short pressure blips and sensor noise.
6050 * units: sec
6051 * offset 3909
6052 */
6053 scaled_channel<uint8_t, 10, 1> maxOilPressureTimeout;
6054 /**
6055 * units: kg/h
6056 * offset 3910
6057 */
6058 scaled_channel<uint16_t, 100, 1> idleFlowEstimateFlow[8] = {};
6059 /**
6060 * units: %
6061 * offset 3926
6062 */
6063 scaled_channel<uint8_t, 2, 1> idleFlowEstimatePosition[8] = {};
6064 /**
6065 * units: mg
6066 * offset 3934
6067 */
6068 int8_t airmassToTimingBins[8] = {};
6069 /**
6070 * units: deg
6071 * offset 3942
6072 */
6073 int8_t airmassToTimingValues[8] = {};
6074 /**
6075 * idle return target ramp duration
6076 * units: seconds
6077 * offset 3950
6078 */
6079 scaled_channel<uint8_t, 10, 1> idleReturnTargetRampDuration;
6080 /**
6081 * need 4 byte alignment
6082 * units: units
6083 * offset 3951
6084 */
6085 uint8_t alignmentFill_at_3951[1] = {};
6086 /**
6087 * Voltage when the wastegate is fully open
6088 * units: v
6089 * offset 3952
6090 */
6092 /**
6093 * Voltage when the wastegate is closed
6094 * units: v
6095 * offset 3956
6096 */
6098 /**
6099 * offset 3960
6100 */
6101 wbo_s canWbo[CAN_WBO_COUNT] = {};
6102 /**
6103 * offset 3976
6104 */
6106 /**
6107 * offset 3978
6108 */
6110 /**
6111 * need 4 byte alignment
6112 * units: units
6113 * offset 3979
6114 */
6115 uint8_t alignmentFill_at_3979[1] = {};
6116 /**
6117 * offset 3980
6118 */
6120 /**
6121 * offset 4004
6122 */
6124};
6125static_assert(sizeof(engine_configuration_s) == 4040);
6126
6127// start of ign_cyl_trim_s
6128struct ign_cyl_trim_s {
6129 /**
6130 * offset 0
6131 */
6132 scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE] = {};
6133};
6134static_assert(sizeof(ign_cyl_trim_s) == 16);
6135
6136// start of fuel_cyl_trim_s
6137struct fuel_cyl_trim_s {
6138 /**
6139 * offset 0
6140 */
6141 scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE] = {};
6142};
6143static_assert(sizeof(fuel_cyl_trim_s) == 16);
6144
6145// start of blend_table_s
6146struct blend_table_s {
6147 /**
6148 * offset 0
6149 */
6150 scaled_channel<int16_t, 10, 1> table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT] = {};
6151 /**
6152 * units: Load
6153 * offset 128
6154 */
6155 uint16_t loadBins[BLEND_TABLE_COUNT] = {};
6156 /**
6157 * units: RPM
6158 * offset 144
6159 */
6160 uint16_t rpmBins[BLEND_TABLE_COUNT] = {};
6161 /**
6162 * offset 160
6163 */
6165 /**
6166 * offset 161
6167 */
6169 /**
6170 * offset 162
6171 */
6172 scaled_channel<int16_t, 10, 1> blendBins[BLEND_FACTOR_SIZE] = {};
6173 /**
6174 * units: %
6175 * offset 178
6176 */
6177 scaled_channel<uint8_t, 2, 1> blendValues[BLEND_FACTOR_SIZE] = {};
6178 /**
6179 * need 4 byte alignment
6180 * units: units
6181 * offset 186
6182 */
6183 uint8_t alignmentFill_at_186[2] = {};
6184};
6185static_assert(sizeof(blend_table_s) == 188);
6186
6187// start of persistent_config_s
6188struct persistent_config_s {
6189 /**
6190 * offset 0
6191 */
6193 /**
6194 * offset 4040
6195 */
6196 float tmfTable[TMF_RATIO_SIZE][TMF_SIZE] = {};
6197 /**
6198 * offset 4056
6199 */
6200 float tmfRatioBins[TMF_RATIO_SIZE] = {};
6201 /**
6202 * offset 4064
6203 */
6204 float tmfOpeningBins[TMF_SIZE] = {};
6205 /**
6206 * units: Nm
6207 * offset 4072
6208 */
6209 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE] = {};
6210 /**
6211 * units: RPM
6212 * offset 4108
6213 */
6214 uint16_t torqueRpmBins[TORQUE_CURVE_RPM_SIZE] = {};
6215 /**
6216 * units: Load
6217 * offset 4120
6218 */
6219 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
6220 /**
6221 * units: mult
6222 * offset 4132
6223 */
6224 float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT] = {};
6225 /**
6226 * units: count
6227 * offset 4276
6228 */
6229 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
6230 /**
6231 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6232 * offset 4288
6233 */
6234 int16_t postCrankingCLTBins[CRANKING_ENRICH_CLT_COUNT] = {};
6235 /**
6236 * target TPS value, 0 to 100%
6237 * TODO: use int8 data date once we template interpolation method
6238 * units: target TPS position
6239 * offset 4300
6240 */
6241 float etbBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
6242 /**
6243 * PWM bias, open loop component of PID closed loop control
6244 * units: ETB duty cycle bias
6245 * offset 4332
6246 */
6247 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
6248 /**
6249 * target Wastegate value, 0 to 100%
6250 * units: target DC position
6251 * offset 4364
6252 */
6253 int8_t dcWastegateBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
6254 /**
6255 * PWM bias, open loop component of PID closed loop control
6256 * units: DC wastegate duty cycle bias
6257 * offset 4372
6258 */
6259 scaled_channel<int16_t, 100, 1> dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
6260 /**
6261 * units: %
6262 * offset 4388
6263 */
6264 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
6265 /**
6266 * units: Load
6267 * offset 4452
6268 */
6269 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
6270 /**
6271 * units: RPM
6272 * offset 4460
6273 */
6274 scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE] = {};
6275 /**
6276 * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
6277 * units: RPM
6278 * offset 4468
6279 */
6280 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
6281 /**
6282 * units: ms
6283 * offset 4484
6284 */
6285 scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE] = {};
6286 /**
6287 * CLT-based target RPM for automatic idle controller
6288 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6289 * offset 4500
6290 */
6291 scaled_channel<int16_t, 1, 1> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
6292 /**
6293 * See idleRpmPid
6294 * units: RPM
6295 * offset 4532
6296 */
6297 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
6298 /**
6299 * units: deg
6300 * offset 4548
6301 */
6302 scaled_channel<int16_t, 10, 1> ignitionCltCorrTable[CLT_TIMING_LOAD_AXIS_SIZE][CLT_TIMING_TEMP_AXIS_SIZE] = {};
6303 /**
6304 * CLT-based timing correction
6305 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6306 * offset 4598
6307 */
6308 scaled_channel<int16_t, 1, 1> ignitionCltCorrTempBins[CLT_TIMING_TEMP_AXIS_SIZE] = {};
6309 /**
6310 * units: Load
6311 * offset 4608
6312 */
6313 scaled_channel<uint8_t, 1, 5> ignitionCltCorrLoadBins[CLT_TIMING_LOAD_AXIS_SIZE] = {};
6314 /**
6315 * need 4 byte alignment
6316 * units: units
6317 * offset 4613
6318 */
6319 uint8_t alignmentFill_at_4613[3] = {};
6320 /**
6321 * units: x
6322 * offset 4616
6323 */
6324 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
6325 /**
6326 * units: y
6327 * offset 4680
6328 */
6329 float scriptCurve1[SCRIPT_CURVE_16] = {};
6330 /**
6331 * units: x
6332 * offset 4744
6333 */
6334 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
6335 /**
6336 * units: y
6337 * offset 4808
6338 */
6339 float scriptCurve2[SCRIPT_CURVE_16] = {};
6340 /**
6341 * units: x
6342 * offset 4872
6343 */
6344 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
6345 /**
6346 * units: y
6347 * offset 4904
6348 */
6349 float scriptCurve3[SCRIPT_CURVE_8] = {};
6350 /**
6351 * units: x
6352 * offset 4936
6353 */
6354 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
6355 /**
6356 * units: y
6357 * offset 4968
6358 */
6359 float scriptCurve4[SCRIPT_CURVE_8] = {};
6360 /**
6361 * units: x
6362 * offset 5000
6363 */
6364 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
6365 /**
6366 * units: y
6367 * offset 5032
6368 */
6369 float scriptCurve5[SCRIPT_CURVE_8] = {};
6370 /**
6371 * units: x
6372 * offset 5064
6373 */
6374 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
6375 /**
6376 * units: y
6377 * offset 5096
6378 */
6379 float scriptCurve6[SCRIPT_CURVE_8] = {};
6380 /**
6381 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
6382 * offset 5128
6383 */
6384 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
6385 /**
6386 * units: RPM
6387 * offset 5144
6388 */
6389 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
6390 /**
6391 * units: ratio
6392 * offset 5160
6393 */
6394 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
6395 /**
6396 * Cranking fuel correction coefficient based on TPS
6397 * units: Ratio
6398 * offset 5224
6399 */
6400 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
6401 /**
6402 * units: %
6403 * offset 5256
6404 */
6405 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
6406 /**
6407 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
6408 * units: RPM
6409 * offset 5288
6410 */
6411 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
6412 /**
6413 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
6414 * units: deg
6415 * offset 5296
6416 */
6417 scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE] = {};
6418 /**
6419 * RPM-based idle position for coasting
6420 * units: RPM
6421 * offset 5304
6422 */
6423 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
6424 /**
6425 * RPM-based idle position for coasting
6426 * units: %
6427 * offset 5320
6428 */
6429 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
6430 /**
6431 * offset 5336
6432 */
6433 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
6434 /**
6435 * units: RPM
6436 * offset 5400
6437 */
6438 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
6439 /**
6440 * offset 5408
6441 */
6442 uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT] = {};
6443 /**
6444 * offset 5424
6445 */
6446 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
6447 /**
6448 * offset 5488
6449 */
6450 uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT] = {};
6451 /**
6452 * units: %
6453 * offset 5504
6454 */
6455 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE] = {};
6456 /**
6457 * units: %
6458 * offset 5568
6459 */
6460 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
6461 /**
6462 * units: RPM
6463 * offset 5576
6464 */
6465 scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE] = {};
6466 /**
6467 * 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.
6468 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6469 * offset 5584
6470 */
6471 float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE] = {};
6472 /**
6473 * 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.
6474 * units: percent
6475 * offset 5616
6476 */
6477 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
6478 /**
6479 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6480 * offset 5648
6481 */
6482 float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
6483 /**
6484 * 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.
6485 * Should be 100 once tune is better
6486 * units: cycles
6487 * offset 5672
6488 */
6489 uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
6490 /**
6491 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
6492 * units: RPM
6493 * offset 5684
6494 */
6495 scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE] = {};
6496 /**
6497 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
6498 * units: deg
6499 * offset 5692
6500 */
6501 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
6502 /**
6503 * units: RPM
6504 * offset 5724
6505 */
6506 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE_RPM] = {};
6507 /**
6508 * units: load
6509 * offset 5728
6510 */
6511 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
6512 /**
6513 * units: %
6514 * offset 5732
6515 */
6516 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE_RPM] = {};
6517 /**
6518 * offset 5764
6519 */
6521 /**
6522 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6523 * offset 53764
6524 */
6525 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
6526 /**
6527 * units: ratio
6528 * offset 53828
6529 */
6530 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
6531 /**
6532 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6533 * offset 53892
6534 */
6535 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
6536 /**
6537 * units: ratio
6538 * offset 53956
6539 */
6540 float iatFuelCorr[IAT_CURVE_SIZE] = {};
6541 /**
6542 * units: ratio
6543 * offset 54020
6544 */
6545 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
6546 /**
6547 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6548 * offset 54052
6549 */
6550 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
6551 /**
6552 * units: counter
6553 * offset 54084
6554 */
6555 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
6556 /**
6557 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6558 * offset 54116
6559 */
6560 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
6561 /**
6562 * 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.
6563 * A reasonable starting point is 60mg per liter per cylinder.
6564 * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
6565 * units: mg
6566 * offset 54124
6567 */
6568 float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
6569 /**
6570 * CLT-based idle position for simple manual idle controller
6571 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6572 * offset 54252
6573 */
6574 float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE] = {};
6575 /**
6576 * CLT-based idle position for simple manual idle controller
6577 * units: %
6578 * offset 54284
6579 */
6580 float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE] = {};
6581 /**
6582 * units: Target RPM
6583 * offset 54348
6584 */
6585 scaled_channel<uint8_t, 1, 100> rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE] = {};
6586 /**
6587 * Long Term Idle Trim (LTIT) multiplicativo para idle open loop
6588 * units: %
6589 * offset 54350
6590 */
6591 scaled_channel<uint16_t, 10, 1> ltitTable[CLT_IDLE_TABLE_CLT_SIZE] = {};
6592 /**
6593 * need 4 byte alignment
6594 * units: units
6595 * offset 54366
6596 */
6597 uint8_t alignmentFill_at_54366[2] = {};
6598 /**
6599 * Also known as MAF transfer function.
6600 * kg/hour value.
6601 * By the way 2.081989116 kg/h = 1 ft3/m
6602 * units: kg/hour
6603 * offset 54368
6604 */
6605 float mafDecoding[MAF_DECODING_COUNT] = {};
6606 /**
6607 * units: V
6608 * offset 54496
6609 */
6610 float mafDecodingBins[MAF_DECODING_COUNT] = {};
6611 /**
6612 * units: deg
6613 * offset 54624
6614 */
6615 scaled_channel<int16_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_TEMP_COUNT] = {};
6616 /**
6617 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6618 * offset 54752
6619 */
6620 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_TEMP_COUNT] = {};
6621 /**
6622 * units: Load
6623 * offset 54760
6624 */
6625 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT] = {};
6626 /**
6627 * units: deg
6628 * offset 54768
6629 */
6630 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
6631 /**
6632 * units: Load
6633 * offset 55280
6634 */
6635 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
6636 /**
6637 * units: RPM
6638 * offset 55312
6639 */
6640 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
6641 /**
6642 * units: onoff
6643 * offset 55344
6644 */
6645 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
6646 /**
6647 * 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.
6648 * 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.
6649 * Additionally, you can also use MLV to get the map values and/or generate the table for you
6650 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
6651 * offset 55404
6652 */
6653 scaled_channel<uint16_t, 100, 1> mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT] = {};
6654 /**
6655 * units: % TPS
6656 * offset 55916
6657 */
6658 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[MAP_EST_LOAD_COUNT] = {};
6659 /**
6660 * units: RPM
6661 * offset 55948
6662 */
6663 uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT] = {};
6664 /**
6665 * units: value
6666 * offset 55980
6667 */
6668 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6669 /**
6670 * units: L
6671 * offset 56044
6672 */
6673 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
6674 /**
6675 * units: RPM
6676 * offset 56060
6677 */
6678 uint16_t vvtTable1RpmBins[VVT_TABLE_RPM_SIZE] = {};
6679 /**
6680 * units: value
6681 * offset 56076
6682 */
6683 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6684 /**
6685 * units: L
6686 * offset 56140
6687 */
6688 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
6689 /**
6690 * units: RPM
6691 * offset 56156
6692 */
6693 uint16_t vvtTable2RpmBins[VVT_TABLE_RPM_SIZE] = {};
6694 /**
6695 * units: deg
6696 * offset 56172
6697 */
6698 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
6699 /**
6700 * units: {bitStringValue(ignLoadUnitLabels, ignLoadUnitIdxPcv)}
6701 * offset 56684
6702 */
6703 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
6704 /**
6705 * units: RPM
6706 * offset 56716
6707 */
6708 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
6709 /**
6710 * units: %
6711 * offset 56748
6712 */
6713 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
6714 /**
6715 * units: {bitStringValue(veLoadUnitLabels, veLoadUnitIdxPcv)}
6716 * offset 57260
6717 */
6718 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
6719 /**
6720 * units: RPM
6721 * offset 57292
6722 */
6723 uint16_t veRpmBins[VE_RPM_COUNT] = {};
6724 /**
6725 * units: {useLambdaOnInterface ? "lambda" : "afr"}
6726 * offset 57324
6727 */
6728 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
6729 /**
6730 * offset 57580
6731 */
6732 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
6733 /**
6734 * units: RPM
6735 * offset 57612
6736 */
6737 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
6738 /**
6739 * units: value
6740 * offset 57644
6741 */
6742 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
6743 /**
6744 * units: %
6745 * offset 57900
6746 */
6747 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6748 /**
6749 * units: %
6750 * offset 57932
6751 */
6752 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6753 /**
6754 * units: value
6755 * offset 57964
6756 */
6757 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
6758 /**
6759 * units: L
6760 * offset 58220
6761 */
6762 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
6763 /**
6764 * units: RPM
6765 * offset 58236
6766 */
6767 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
6768 /**
6769 * units: value
6770 * offset 58252
6771 */
6772 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
6773 /**
6774 * units: L
6775 * offset 58508
6776 */
6777 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
6778 /**
6779 * units: RPM
6780 * offset 58524
6781 */
6782 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
6783 /**
6784 * units: value
6785 * offset 58540
6786 */
6787 uint8_t scriptTable3[TABLE_3_LOAD_SIZE][TABLE_3_RPM_SIZE] = {};
6788 /**
6789 * units: L
6790 * offset 58604
6791 */
6792 int16_t scriptTable3LoadBins[TABLE_3_LOAD_SIZE] = {};
6793 /**
6794 * units: RPM
6795 * offset 58620
6796 */
6797 int16_t scriptTable3RpmBins[TABLE_3_RPM_SIZE] = {};
6798 /**
6799 * units: value
6800 * offset 58636
6801 */
6802 uint8_t scriptTable4[TABLE_4_LOAD_SIZE][TABLE_4_RPM_SIZE] = {};
6803 /**
6804 * units: L
6805 * offset 58716
6806 */
6807 int16_t scriptTable4LoadBins[TABLE_4_LOAD_SIZE] = {};
6808 /**
6809 * units: RPM
6810 * offset 58732
6811 */
6812 int16_t scriptTable4RpmBins[TABLE_4_RPM_SIZE] = {};
6813 /**
6814 * offset 58752
6815 */
6816 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
6817 /**
6818 * units: rpm
6819 * offset 58760
6820 */
6821 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
6822 /**
6823 * offset 58768
6824 */
6825 ign_cyl_trim_s ignTrims[MAX_CYLINDER_COUNT] = {};
6826 /**
6827 * offset 58960
6828 */
6829 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
6830 /**
6831 * units: rpm
6832 * offset 58968
6833 */
6834 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
6835 /**
6836 * offset 58976
6837 */
6838 fuel_cyl_trim_s fuelTrims[MAX_CYLINDER_COUNT] = {};
6839 /**
6840 * units: ratio
6841 * offset 59168
6842 */
6843 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
6844 /**
6845 * units: Airmass
6846 * offset 59184
6847 */
6848 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
6849 /**
6850 * units: %
6851 * offset 59192
6852 */
6853 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
6854 /**
6855 * units: %
6856 * offset 59200
6857 */
6858 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
6859 /**
6860 * units: %
6861 * offset 59208
6862 */
6863 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
6864 /**
6865 * units: %
6866 * offset 59216
6867 */
6868 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
6869 /**
6870 * units: %
6871 * offset 59224
6872 */
6873 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
6874 /**
6875 * units: %
6876 * offset 59232
6877 */
6878 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
6879 /**
6880 * units: %
6881 * offset 59240
6882 */
6883 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
6884 /**
6885 * units: %
6886 * offset 59248
6887 */
6888 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
6889 /**
6890 * units: %
6891 * offset 59256
6892 */
6893 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
6894 /**
6895 * units: %
6896 * offset 59264
6897 */
6898 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
6899 /**
6900 * units: %
6901 * offset 59272
6902 */
6903 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
6904 /**
6905 * units: %
6906 * offset 59280
6907 */
6908 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
6909 /**
6910 * units: TPS
6911 * offset 59288
6912 */
6913 uint8_t tcu_tccTpsBins[8] = {};
6914 /**
6915 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6916 * offset 59296
6917 */
6918 uint8_t tcu_tccLockSpeed[8] = {};
6919 /**
6920 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6921 * offset 59304
6922 */
6923 uint8_t tcu_tccUnlockSpeed[8] = {};
6924 /**
6925 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6926 * offset 59312
6927 */
6928 uint8_t tcu_32SpeedBins[8] = {};
6929 /**
6930 * units: %
6931 * offset 59320
6932 */
6933 uint8_t tcu_32Vals[8] = {};
6934 /**
6935 * units: %
6936 * offset 59328
6937 */
6938 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_RPM_SIZE] = {};
6939 /**
6940 * units: %
6941 * offset 59364
6942 */
6943 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
6944 /**
6945 * units: RPM
6946 * offset 59370
6947 */
6948 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_RPM_SIZE] = {};
6949 /**
6950 * units: deg
6951 * offset 59376
6952 */
6953 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_RPM_SIZE] = {};
6954 /**
6955 * units: %
6956 * offset 59412
6957 */
6958 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
6959 /**
6960 * units: RPM
6961 * offset 59418
6962 */
6963 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_RPM_SIZE] = {};
6964 /**
6965 * units: deg
6966 * offset 59424
6967 */
6968 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6969 /**
6970 * units: TPS
6971 * offset 59456
6972 */
6973 uint16_t alsIgnRetardLoadBins[ALS_SIZE] = {};
6974 /**
6975 * units: RPM
6976 * offset 59464
6977 */
6978 uint16_t alsIgnRetardrpmBins[ALS_RPM_SIZE] = {};
6979 /**
6980 * units: percent
6981 * offset 59472
6982 */
6983 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[ALS_SIZE][ALS_RPM_SIZE] = {};
6984 /**
6985 * units: TPS
6986 * offset 59504
6987 */
6988 uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE] = {};
6989 /**
6990 * units: RPM
6991 * offset 59512
6992 */
6993 uint16_t alsFuelAdjustmentrpmBins[ALS_RPM_SIZE] = {};
6994 /**
6995 * units: ratio
6996 * offset 59520
6997 */
6998 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6999 /**
7000 * units: TPS
7001 * offset 59552
7002 */
7003 uint16_t alsIgnSkipLoadBins[ALS_SIZE] = {};
7004 /**
7005 * units: RPM
7006 * offset 59560
7007 */
7008 uint16_t alsIgnSkiprpmBins[ALS_RPM_SIZE] = {};
7009 /**
7010 * offset 59568
7011 */
7012 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
7013 /**
7014 * offset 60320
7015 */
7016 blend_table_s veBlends[VE_BLEND_COUNT] = {};
7017 /**
7018 * units: %
7019 * offset 61072
7020 */
7021 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[THR_EST_SIZE] = {};
7022 /**
7023 * In units of g/s normalized to choked flow conditions
7024 * units: g/s
7025 * offset 61096
7026 */
7027 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[THR_EST_SIZE] = {};
7028 /**
7029 * offset 61120
7030 */
7031 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
7032 /**
7033 * offset 61496
7034 */
7035 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
7036 /**
7037 * units: level
7038 * offset 61872
7039 */
7040 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
7041 /**
7042 * units: level
7043 * offset 61896
7044 */
7045 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
7046 /**
7047 * units: level
7048 * offset 61920
7049 */
7050 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
7051 /**
7052 * units: level
7053 * offset 61944
7054 */
7055 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
7056 /**
7057 * units: level
7058 * offset 61968
7059 */
7060 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
7061 /**
7062 * units: level
7063 * offset 61992
7064 */
7065 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
7066 /**
7067 * units: level
7068 * offset 62016
7069 */
7070 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
7071 /**
7072 * units: level
7073 * offset 62040
7074 */
7075 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
7076 /**
7077 * units: level
7078 * offset 62064
7079 */
7080 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
7081 /**
7082 * units: level
7083 * offset 62088
7084 */
7085 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
7086 /**
7087 * units: level
7088 * offset 62112
7089 */
7090 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
7091 /**
7092 * units: lambda
7093 * offset 62136
7094 */
7095 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[LAM_SIZE][LAM_RPM_SIZE] = {};
7096 /**
7097 * offset 62152
7098 */
7099 uint16_t lambdaMaxDeviationLoadBins[LAM_SIZE] = {};
7100 /**
7101 * units: RPM
7102 * offset 62160
7103 */
7104 uint16_t lambdaMaxDeviationRpmBins[LAM_RPM_SIZE] = {};
7105 /**
7106 * units: %
7107 * offset 62168
7108 */
7109 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_RPM_SIZE] = {};
7110 /**
7111 * offset 62204
7112 */
7113 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
7114 /**
7115 * units: RPM
7116 * offset 62216
7117 */
7118 uint16_t injectorStagingRpmBins[INJ_STAGING_RPM_SIZE] = {};
7119 /**
7120 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
7121 * offset 62228
7122 */
7123 int16_t wwCltBins[WWAE_TABLE_SIZE] = {};
7124 /**
7125 * offset 62244
7126 */
7127 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
7128 /**
7129 * offset 62252
7130 */
7131 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
7132 /**
7133 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7134 * offset 62260
7135 */
7136 uint8_t wwMapBins[WWAE_TABLE_SIZE] = {};
7137 /**
7138 * offset 62268
7139 */
7140 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
7141 /**
7142 * offset 62276
7143 */
7144 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
7145 /**
7146 * units: %
7147 * offset 62284
7148 */
7149 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
7150 /**
7151 * units: deg
7152 * offset 62300
7153 */
7154 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
7155 /**
7156 * units: volts
7157 * offset 62316
7158 */
7159 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
7160 /**
7161 * units: ms
7162 * offset 62324
7163 */
7164 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
7165 /**
7166 * units: kPa
7167 * offset 62340
7168 */
7169 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
7170 /**
7171 * units: load
7172 * offset 62540
7173 */
7174 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
7175 /**
7176 * units: RPM
7177 * offset 62560
7178 */
7179 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
7180 /**
7181 * units: %
7182 * offset 62570
7183 */
7184 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_RPM_SIZE] = {};
7185 /**
7186 * units: cc/lobe
7187 * offset 62670
7188 */
7189 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
7190 /**
7191 * units: RPM
7192 * offset 62690
7193 */
7194 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_RPM_SIZE] = {};
7195 /**
7196 * units: %
7197 * offset 62700
7198 */
7199 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7200 /**
7201 * units: fuel mass/mg
7202 * offset 62828
7203 */
7204 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7205 /**
7206 * units: bar
7207 * offset 62844
7208 */
7209 scaled_channel<uint16_t, 10, 1> hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7210 /**
7211 * units: ms
7212 * offset 62860
7213 */
7214 scaled_channel<uint16_t, 100, 1> injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE] = {};
7215 /**
7216 * units: fuel mass/mg
7217 * offset 62868
7218 */
7219 scaled_channel<uint16_t, 100, 1> injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE] = {};
7220 /**
7221 * units: bar
7222 * offset 62872
7223 */
7224 scaled_channel<uint16_t, 10, 1> injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE] = {};
7225 /**
7226 * units: RPM
7227 * offset 62876
7228 */
7229 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
7230 /**
7231 * Knock sensor output knock detection threshold depending on current RPM.
7232 * units: dB
7233 * offset 62908
7234 */
7235 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
7236 /**
7237 * units: RPM
7238 * offset 62924
7239 */
7240 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7241 /**
7242 * units: multiplier
7243 * offset 62928
7244 */
7245 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7246 /**
7247 * units: RPM
7248 * offset 62932
7249 */
7250 scaled_channel<uint8_t, 1, 50> predictiveMapBlendDurationBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7251 /**
7252 * units: second
7253 * offset 62936
7254 */
7255 scaled_channel<uint8_t, 50, 1> predictiveMapBlendDurationValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7256 /**
7257 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
7258 * offset 62940
7259 */
7260 scaled_channel<int16_t, 1, 1> cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
7261 /**
7262 * units: RPM
7263 * offset 62948
7264 */
7265 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
7266 /**
7267 * units: volt
7268 * offset 62956
7269 */
7270 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
7271 /**
7272 * units: %
7273 * offset 62972
7274 */
7275 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
7276 /**
7277 * units: volts
7278 * offset 62980
7279 */
7280 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
7281 /**
7282 * units: multiplier
7283 * offset 62988
7284 */
7285 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
7286 /**
7287 * units: %
7288 * offset 62996
7289 */
7290 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
7291 /**
7292 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7293 * offset 63004
7294 */
7295 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
7296 /**
7297 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7298 * offset 63012
7299 */
7300 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
7301 /**
7302 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7303 * offset 63020
7304 */
7305 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
7306 /**
7307 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7308 * offset 63028
7309 */
7310 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
7311 /**
7312 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7313 * offset 63036
7314 */
7315 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
7316 /**
7317 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7318 * offset 63044
7319 */
7320 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
7321 /**
7322 * units: ms
7323 * offset 63052
7324 */
7325 float tcu_shiftTime;
7326 /**
7327 * units: volts
7328 * offset 63056
7329 */
7330 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
7331 /**
7332 * units: Load
7333 * offset 63088
7334 */
7335 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
7336 /**
7337 * units: RPM
7338 * offset 63096
7339 */
7340 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
7341 /**
7342 * units: C
7343 * offset 63104
7344 */
7345 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
7346 /**
7347 * units: ratio
7348 * offset 63124
7349 */
7350 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
7351 /**
7352 * units: C
7353 * offset 63144
7354 */
7355 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
7356 /**
7357 * units: ratio
7358 * offset 63164
7359 */
7360 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
7361 /**
7362 * units: C
7363 * offset 63184
7364 */
7365 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
7366 /**
7367 * offset 63204
7368 */
7369 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
7370 /**
7371 * units: C
7372 * offset 63224
7373 */
7374 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
7375 /**
7376 * offset 63244
7377 */
7378 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
7379 /**
7380 * "Minimum Battery Voltage"
7381 * units: #
7382 * offset 63264
7383 */
7384 scaled_channel<uint8_t, 10, 1> cel_battery_min_v;
7385 /**
7386 * "Maximum Battery Voltage"
7387 * units: #
7388 * offset 63265
7389 */
7390 scaled_channel<uint8_t, 10, 1> cel_battery_max_v;
7391 /**
7392 * "Minimum MAP V"
7393 * units: V
7394 * offset 63266
7395 */
7396 scaled_channel<uint8_t, 50, 1> cel_map_min_v;
7397 /**
7398 * "Maximum MAP V"
7399 * units: V
7400 * offset 63267
7401 */
7402 scaled_channel<uint8_t, 50, 1> cel_map_max_v;
7403 /**
7404 * "Minimum IAT V"
7405 * units: V
7406 * offset 63268
7407 */
7408 scaled_channel<uint8_t, 50, 1> cel_iat_min_v;
7409 /**
7410 * "Maximum IAT V"
7411 * units: V
7412 * offset 63269
7413 */
7414 scaled_channel<uint8_t, 50, 1> cel_iat_max_v;
7415 /**
7416 * "Minimum TPS V"
7417 * units: V
7418 * offset 63270
7419 */
7420 scaled_channel<uint8_t, 50, 1> cel_tps_min_v;
7421 /**
7422 * "Maximum TPS V"
7423 * units: V
7424 * offset 63271
7425 */
7426 scaled_channel<uint8_t, 50, 1> cel_tps_max_v;
7427 /**
7428 * units: RPM
7429 * offset 63272
7430 */
7431 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
7432 /**
7433 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7434 * offset 63280
7435 */
7436 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
7437 /**
7438 * offset 63288
7439 */
7440 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
7441 /**
7442 * @@DYNO_RPM_STEP_TOOLTIP@@
7443 * units: Rpm
7444 * offset 63664
7445 */
7446 scaled_channel<uint8_t, 1, 1> dynoRpmStep;
7447 /**
7448 * @@DYNO_SAE_TEMPERATURE_C_TOOLTIP@@
7449 * units: C
7450 * offset 63665
7451 */
7452 scaled_channel<int8_t, 1, 1> dynoSaeTemperatureC;
7453 /**
7454 * @@DYNO_SAE_RELATIVE_HUMIDITY_TOOLTIP@@
7455 * units: %
7456 * offset 63666
7457 */
7458 scaled_channel<uint8_t, 1, 1> dynoSaeRelativeHumidity;
7459 /**
7460 * need 4 byte alignment
7461 * units: units
7462 * offset 63667
7463 */
7464 uint8_t alignmentFill_at_63667[1] = {};
7465 /**
7466 * @@DYNO_SAE_BARO_TOOLTIP@@
7467 * units: KPa
7468 * offset 63668
7469 */
7470 scaled_channel<float, 1, 1> dynoSaeBaro;
7471 /**
7472 * @@DYNO_CAR_WHEEL_DIA_INCH_TOOLTIP@@
7473 * units: Inch
7474 * offset 63672
7475 */
7476 scaled_channel<int8_t, 1, 1> dynoCarWheelDiaInch;
7477 /**
7478 * @@DYNO_CAR_WHEEL_ASPECT_RATIO_TOOLTIP@@
7479 * units: Aspect Ratio (height)
7480 * offset 63673
7481 */
7482 scaled_channel<int8_t, 1, 1> dynoCarWheelAspectRatio;
7483 /**
7484 * @@DYNO_CAR_WHEEL_TIRE_WIDTH_TOOLTIP@@
7485 * units: Width mm
7486 * offset 63674
7487 */
7488 scaled_channel<int16_t, 1, 1> dynoCarWheelTireWidthMm;
7489 /**
7490 * @@DYNO_CAR_GEAR_PRIMARY_REDUCTION_TOOLTIP@@
7491 * units: Units
7492 * offset 63676
7493 */
7494 scaled_channel<float, 1, 1> dynoCarGearPrimaryReduction;
7495 /**
7496 * @@DYNO_CAR_GEAR_RATIO_TOOLTIP@@
7497 * units: Units
7498 * offset 63680
7499 */
7500 scaled_channel<float, 1, 1> dynoCarGearRatio;
7501 /**
7502 * @@DYNO_CAR_GEAR_FINAL_DRIVE_TOOLTIP@@
7503 * units: Units
7504 * offset 63684
7505 */
7506 scaled_channel<float, 1, 1> dynoCarGearFinalDrive;
7507 /**
7508 * @@DYNO_CAR_CAR_MASS_TOOLTIP@@
7509 * units: Kg
7510 * offset 63688
7511 */
7512 scaled_channel<int16_t, 1, 1> dynoCarCarMassKg;
7513 /**
7514 * @@DYNO_CAR_CARGO_MASS_TOOLTIP@@
7515 * units: Kg
7516 * offset 63690
7517 */
7518 scaled_channel<int16_t, 1, 1> dynoCarCargoMassKg;
7519 /**
7520 * @@DYNO_CAR_COEFF_OF_DRAG_TOOLTIP@@
7521 * units: Coeff
7522 * offset 63692
7523 */
7524 scaled_channel<float, 1, 1> dynoCarCoeffOfDrag;
7525 /**
7526 * @@DYNO_CAR_FRONTAL_AREA_TOOLTIP@@
7527 * units: m2
7528 * offset 63696
7529 */
7530 scaled_channel<float, 1, 1> dynoCarFrontalAreaM2;
7531 /**
7532 * units: deg
7533 * offset 63700
7534 */
7535 scaled_channel<int8_t, 10, 1> trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_RPM_SIZE] = {};
7536 /**
7537 * units: rpm
7538 * offset 63716
7539 */
7540 scaled_channel<uint8_t, 1, 50> trailingSparkRpmBins[TRAILING_SPARK_RPM_SIZE] = {};
7541 /**
7542 * units: Load
7543 * offset 63720
7544 */
7545 scaled_channel<uint8_t, 1, 5> trailingSparkLoadBins[TRAILING_SPARK_SIZE] = {};
7546 /**
7547 * units: RPM
7548 * offset 63724
7549 */
7550 scaled_channel<uint8_t, 1, 100> maximumOilPressureBins[4] = {};
7551 /**
7552 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7553 * offset 63728
7554 */
7555 scaled_channel<uint8_t, 1, 10> maximumOilPressureValues[4] = {};
7556 /**
7557 * Selects the X axis to use for the table.
7558 * offset 63732
7559 */
7561 /**
7562 * How many % of ignition events will be cut
7563 * units: %
7564 * offset 63733
7565 */
7566 int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7567 /**
7568 * need 4 byte alignment
7569 * units: units
7570 * offset 63745
7571 */
7572 uint8_t alignmentFill_at_63745[1] = {};
7573 /**
7574 * offset 63746
7575 */
7576 int16_t torqueReductionCutXBins[TORQUE_TABLE_X_SIZE] = {};
7577 /**
7578 * units: gear N°
7579 * offset 63758
7580 */
7581 int8_t torqueReductionCutGearBins[TORQUE_TABLE_Y_SIZE] = {};
7582 /**
7583 * Selects the X axis to use for the table.
7584 * offset 63760
7585 */
7587 /**
7588 * need 4 byte alignment
7589 * units: units
7590 * offset 63761
7591 */
7592 uint8_t alignmentFill_at_63761[3] = {};
7593 /**
7594 * 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
7595 * units: ms
7596 * offset 63764
7597 */
7598 float torqueReductionTimeTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7599 /**
7600 * offset 63812
7601 */
7602 int16_t torqueReductionTimeXBins[TORQUE_TABLE_X_SIZE] = {};
7603 /**
7604 * units: gear N°
7605 * offset 63824
7606 */
7607 int8_t torqueReductionTimeGearBins[TORQUE_TABLE_Y_SIZE] = {};
7608 /**
7609 * Selects the X axis to use for the table.
7610 * offset 63826
7611 */
7613 /**
7614 * need 4 byte alignment
7615 * units: units
7616 * offset 63827
7617 */
7618 uint8_t alignmentFill_at_63827[1] = {};
7619 /**
7620 * How many degrees of timing advance will be reduced during the Torque Reduction Time
7621 * units: deg
7622 * offset 63828
7623 */
7624 float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7625 /**
7626 * offset 63876
7627 */
7628 int16_t torqueReductionIgnitionRetardXBins[TORQUE_TABLE_X_SIZE] = {};
7629 /**
7630 * units: gear N°
7631 * offset 63888
7632 */
7633 int8_t torqueReductionIgnitionRetardGearBins[TORQUE_TABLE_Y_SIZE] = {};
7634 /**
7635 * need 4 byte alignment
7636 * units: units
7637 * offset 63890
7638 */
7639 uint8_t alignmentFill_at_63890[2] = {};
7640 /**
7641 offset 63892 bit 0 */
7642 bool wizardNumberOfCylinders : 1 {};
7643 /**
7644 offset 63892 bit 1 */
7645 bool wizardFiringOrder : 1 {};
7646 /**
7647 offset 63892 bit 2 */
7648 bool wizardMapSensorType : 1 {};
7649 /**
7650 offset 63892 bit 3 */
7651 bool wizardCrankTrigger : 1 {};
7652 /**
7653 offset 63892 bit 4 */
7654 bool wizardCamTrigger : 1 {};
7655 /**
7656 offset 63892 bit 5 */
7657 bool wizardInjectorFlow : 1 {};
7658 /**
7659 offset 63892 bit 6 */
7660 bool cyl8certification : 1 {};
7661 /**
7662 offset 63892 bit 7 */
7663 bool unusedBit_290_7 : 1 {};
7664 /**
7665 offset 63892 bit 8 */
7666 bool unusedBit_290_8 : 1 {};
7667 /**
7668 offset 63892 bit 9 */
7669 bool unusedBit_290_9 : 1 {};
7670 /**
7671 offset 63892 bit 10 */
7672 bool unusedBit_290_10 : 1 {};
7673 /**
7674 offset 63892 bit 11 */
7675 bool unusedBit_290_11 : 1 {};
7676 /**
7677 offset 63892 bit 12 */
7678 bool unusedBit_290_12 : 1 {};
7679 /**
7680 offset 63892 bit 13 */
7681 bool unusedBit_290_13 : 1 {};
7682 /**
7683 offset 63892 bit 14 */
7684 bool unusedBit_290_14 : 1 {};
7685 /**
7686 offset 63892 bit 15 */
7687 bool unusedBit_290_15 : 1 {};
7688 /**
7689 offset 63892 bit 16 */
7690 bool unusedBit_290_16 : 1 {};
7691 /**
7692 offset 63892 bit 17 */
7693 bool unusedBit_290_17 : 1 {};
7694 /**
7695 offset 63892 bit 18 */
7696 bool unusedBit_290_18 : 1 {};
7697 /**
7698 offset 63892 bit 19 */
7699 bool unusedBit_290_19 : 1 {};
7700 /**
7701 offset 63892 bit 20 */
7702 bool unusedBit_290_20 : 1 {};
7703 /**
7704 offset 63892 bit 21 */
7705 bool unusedBit_290_21 : 1 {};
7706 /**
7707 offset 63892 bit 22 */
7708 bool unusedBit_290_22 : 1 {};
7709 /**
7710 offset 63892 bit 23 */
7711 bool unusedBit_290_23 : 1 {};
7712 /**
7713 offset 63892 bit 24 */
7714 bool unusedBit_290_24 : 1 {};
7715 /**
7716 offset 63892 bit 25 */
7717 bool unusedBit_290_25 : 1 {};
7718 /**
7719 offset 63892 bit 26 */
7720 bool unusedBit_290_26 : 1 {};
7721 /**
7722 offset 63892 bit 27 */
7723 bool unusedBit_290_27 : 1 {};
7724 /**
7725 offset 63892 bit 28 */
7726 bool unusedBit_290_28 : 1 {};
7727 /**
7728 offset 63892 bit 29 */
7729 bool unusedBit_290_29 : 1 {};
7730 /**
7731 offset 63892 bit 30 */
7732 bool unusedBit_290_30 : 1 {};
7733 /**
7734 offset 63892 bit 31 */
7735 bool unusedBit_290_31 : 1 {};
7736 /**
7737 * offset 63896
7738 */
7739 uint8_t rainTimingAdjustment[TIMING_ADJUSTMENT_SIZE][TIMING_ADJUSTMENT_SIZE] = {};
7740 /**
7741 * units: RPM
7742 * offset 63912
7743 */
7744 uint16_t rainTimingRpmBins[TIMING_ADJUSTMENT_SIZE] = {};
7745 /**
7746 * units: C
7747 * offset 63920
7748 */
7749 float rainTimingPpsBins[TIMING_ADJUSTMENT_SIZE] = {};
7750};
7751static_assert(sizeof(persistent_config_s) == 63936);
7752
7753// end
7754// 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 rainTimingAdjustment[TIMING_ADJUSTMENT_SIZE][TIMING_ADJUSTMENT_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