rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_alphax-8chan_f7.h
Go to the documentation of this file.
1// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
2// by class com.rusefi.output.CHeaderConsumer
3// begin
4#pragma once
5#include "rusefi_types.h"
6// start of stft_cell_cfg_s
7struct stft_cell_cfg_s {
8 /**
9 * Maximum % that the short term fuel trim can add
10 * units: %
11 * offset 0
12 */
13 scaled_channel<uint8_t, 10, 1> maxAdd;
14 /**
15 * Maximum % that the short term fuel trim can remove
16 * units: %
17 * offset 1
18 */
19 scaled_channel<uint8_t, 10, 1> maxRemove;
20 /**
21 * Commonly referred as Integral gain.
22 * Time constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.
23 * Lower values makes the correction more sensitive, higher values slow the correction down.
24 * units: sec
25 * offset 2
26 */
27 scaled_channel<uint16_t, 10, 1> timeConstant;
28};
29static_assert(sizeof(stft_cell_cfg_s) == 4);
30
31// start of stft_s
32struct stft_s {
33 /**
34 * Below this RPM, the idle region is active, idle+300 would be a good value
35 * units: RPM
36 * offset 0
37 */
38 scaled_channel<uint8_t, 1, 50> maxIdleRegionRpm;
39 /**
40 * need 4 byte alignment
41 * units: units
42 * offset 1
43 */
44 uint8_t alignmentFill_at_1[1] = {};
45 /**
46 * Below this engine load, the overrun region is active
47 * When tuning by MAP the units are kPa/psi, e.g. 30 would mean 30kPa. When tuning TPS, 30 would be 30%
48 * units: load
49 * offset 2
50 */
51 uint16_t maxOverrunLoad;
52 /**
53 * Above this engine load, the power region is active
54 * When tuning by MAP the units are kPa/psi
55 * units: load
56 * offset 4
57 */
58 uint16_t minPowerLoad;
59 /**
60 * When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required.
61 * units: %
62 * offset 6
63 */
64 scaled_channel<uint8_t, 10, 1> deadband;
65 /**
66 * Minimum coolant temperature before closed loop operation is allowed.
67 * units: {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 36
566 */
567 scaled_channel<int16_t, 100, 1> battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE] = {};
568};
569static_assert(sizeof(injector_s) == 100);
570
571// start of trigger_config_s
572struct trigger_config_s {
573 /**
574 * https://wiki.rusefi.com/All-Supported-Triggers
575 * offset 0
576 */
578 /**
579 * units: number
580 * offset 4
581 */
583 /**
584 * units: number
585 * offset 8
586 */
588};
589static_assert(sizeof(trigger_config_s) == 12);
590
591// start of afr_sensor_s
592struct afr_sensor_s {
593 /**
594 * offset 0
595 */
597 /**
598 * offset 1
599 */
601 /**
602 * need 4 byte alignment
603 * units: units
604 * offset 2
605 */
606 uint8_t alignmentFill_at_2[2] = {};
607 /**
608 * units: volts
609 * offset 4
610 */
611 float v1;
612 /**
613 * units: AFR
614 * offset 8
615 */
616 float value1;
617 /**
618 * units: volts
619 * offset 12
620 */
621 float v2;
622 /**
623 * units: AFR
624 * offset 16
625 */
626 float value2;
627};
628static_assert(sizeof(afr_sensor_s) == 20);
629
630// start of idle_hardware_s
631struct idle_hardware_s {
632 /**
633 * units: Hz
634 * offset 0
635 */
637 /**
638 * offset 4
639 */
641 /**
642 * offset 6
643 */
645 /**
646 * offset 8
647 */
649 /**
650 * offset 10
651 */
653 /**
654 * need 4 byte alignment
655 * units: units
656 * offset 11
657 */
658 uint8_t alignmentFill_at_11[1] = {};
659};
660static_assert(sizeof(idle_hardware_s) == 12);
661
662// start of dc_io
663struct dc_io {
664 /**
665 * offset 0
666 */
668 /**
669 * offset 2
670 */
672 /**
673 * Acts as EN pin in two-wire mode
674 * offset 4
675 */
677 /**
678 * offset 6
679 */
681};
682static_assert(sizeof(dc_io) == 8);
683
684// start of vr_threshold_s
685struct vr_threshold_s {
686 /**
687 * units: rpm
688 * offset 0
689 */
690 scaled_channel<uint8_t, 1, 50> rpmBins[6] = {};
691 /**
692 * units: volts
693 * offset 6
694 */
695 scaled_channel<uint8_t, 100, 1> values[6] = {};
696 /**
697 * offset 12
698 */
699 Gpio pin;
700 /**
701 * need 4 byte alignment
702 * units: units
703 * offset 14
704 */
705 uint8_t alignmentFill_at_14[2] = {};
706};
707static_assert(sizeof(vr_threshold_s) == 16);
708
709// start of wbo_s
710struct wbo_s {
711 /**
712 * offset 0
713 */
715 /**
716 * offset 1
717 */
719 /**
720 * offset 2
721 */
723 /**
724 * offset 3
725 */
727 /**
728 offset 4 bit 0 */
729 bool enableRemap : 1 {};
730 /**
731 offset 4 bit 1 */
732 bool unusedBit_5_1 : 1 {};
733 /**
734 offset 4 bit 2 */
735 bool unusedBit_5_2 : 1 {};
736 /**
737 offset 4 bit 3 */
738 bool unusedBit_5_3 : 1 {};
739 /**
740 offset 4 bit 4 */
741 bool unusedBit_5_4 : 1 {};
742 /**
743 offset 4 bit 5 */
744 bool unusedBit_5_5 : 1 {};
745 /**
746 offset 4 bit 6 */
747 bool unusedBit_5_6 : 1 {};
748 /**
749 offset 4 bit 7 */
750 bool unusedBit_5_7 : 1 {};
751 /**
752 offset 4 bit 8 */
753 bool unusedBit_5_8 : 1 {};
754 /**
755 offset 4 bit 9 */
756 bool unusedBit_5_9 : 1 {};
757 /**
758 offset 4 bit 10 */
759 bool unusedBit_5_10 : 1 {};
760 /**
761 offset 4 bit 11 */
762 bool unusedBit_5_11 : 1 {};
763 /**
764 offset 4 bit 12 */
765 bool unusedBit_5_12 : 1 {};
766 /**
767 offset 4 bit 13 */
768 bool unusedBit_5_13 : 1 {};
769 /**
770 offset 4 bit 14 */
771 bool unusedBit_5_14 : 1 {};
772 /**
773 offset 4 bit 15 */
774 bool unusedBit_5_15 : 1 {};
775 /**
776 offset 4 bit 16 */
777 bool unusedBit_5_16 : 1 {};
778 /**
779 offset 4 bit 17 */
780 bool unusedBit_5_17 : 1 {};
781 /**
782 offset 4 bit 18 */
783 bool unusedBit_5_18 : 1 {};
784 /**
785 offset 4 bit 19 */
786 bool unusedBit_5_19 : 1 {};
787 /**
788 offset 4 bit 20 */
789 bool unusedBit_5_20 : 1 {};
790 /**
791 offset 4 bit 21 */
792 bool unusedBit_5_21 : 1 {};
793 /**
794 offset 4 bit 22 */
795 bool unusedBit_5_22 : 1 {};
796 /**
797 offset 4 bit 23 */
798 bool unusedBit_5_23 : 1 {};
799 /**
800 offset 4 bit 24 */
801 bool unusedBit_5_24 : 1 {};
802 /**
803 offset 4 bit 25 */
804 bool unusedBit_5_25 : 1 {};
805 /**
806 offset 4 bit 26 */
807 bool unusedBit_5_26 : 1 {};
808 /**
809 offset 4 bit 27 */
810 bool unusedBit_5_27 : 1 {};
811 /**
812 offset 4 bit 28 */
813 bool unusedBit_5_28 : 1 {};
814 /**
815 offset 4 bit 29 */
816 bool unusedBit_5_29 : 1 {};
817 /**
818 offset 4 bit 30 */
819 bool unusedBit_5_30 : 1 {};
820 /**
821 offset 4 bit 31 */
822 bool unusedBit_5_31 : 1 {};
823};
824static_assert(sizeof(wbo_s) == 8);
825
826// start of vvl_s
827struct vvl_s {
828 /**
829 * units: %
830 * offset 0
831 */
832 int8_t fuelAdderPercent;
833 /**
834 * need 4 byte alignment
835 * units: units
836 * offset 1
837 */
838 uint8_t alignmentFill_at_1[3] = {};
839 /**
840 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
841 * units: deg
842 * offset 4
843 */
844 float ignitionRetard;
845 /**
846 * offset 8
847 */
848 int minimumTps;
849 /**
850 * units: {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 176
1582 */
1584 /**
1585 * Does the vehicle have a turbo or supercharger?
1586 offset 276 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 276 bit 1 */
1591 bool useFordRedundantTps : 1 {};
1592 /**
1593 offset 276 bit 2 */
1594 bool enableKline : 1 {};
1595 /**
1596 offset 276 bit 3 */
1597 bool overrideTriggerGaps : 1 {};
1598 /**
1599 * Turn on this fan when AC is on.
1600 offset 276 bit 4 */
1601 bool enableFan1WithAc : 1 {};
1602 /**
1603 * Turn on this fan when AC is on.
1604 offset 276 bit 5 */
1605 bool enableFan2WithAc : 1 {};
1606 /**
1607 * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
1608 offset 276 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 276 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 276 bit 8 */
1617 bool isDoubleSolenoidIdle : 1 {};
1618 /**
1619 offset 276 bit 9 */
1620 bool useEeprom : 1 {};
1621 /**
1622 * Switch between Industrial and Cic PID implementation
1623 offset 276 bit 10 */
1624 bool useCicPidForIdle : 1 {};
1625 /**
1626 offset 276 bit 11 */
1627 bool useTLE8888_cranking_hack : 1 {};
1628 /**
1629 offset 276 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 276 bit 13 */
1635 /**
1636 offset 276 bit 14 */
1637 bool launchControlEnabled : 1 {};
1638 /**
1639 offset 276 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 276 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 276 bit 17 */
1650 /**
1651 offset 276 bit 18 */
1652 bool useTLE8888_stepper : 1 {};
1653 /**
1654 offset 276 bit 19 */
1656 /**
1657 * Print incoming and outgoing first bus CAN messages in rusEFI console
1658 offset 276 bit 20 */
1659 bool verboseCan : 1 {};
1660 /**
1661 * Experimental setting that will cause a misfire
1662 * DO NOT ENABLE.
1663 offset 276 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 276 bit 22 */
1668 bool useFordRedundantPps : 1 {};
1669 /**
1670 offset 276 bit 23 */
1671 bool cltSensorPulldown : 1 {};
1672 /**
1673 offset 276 bit 24 */
1674 bool iatSensorPulldown : 1 {};
1675 /**
1676 offset 276 bit 25 */
1677 bool allowIdenticalPps : 1 {};
1678 /**
1679 offset 276 bit 26 */
1680 bool overrideVvtTriggerGaps : 1 {};
1681 /**
1682 * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
1683 offset 276 bit 27 */
1684 bool useSpiImu : 1 {};
1685 /**
1686 offset 276 bit 28 */
1687 bool enableStagedInjection : 1 {};
1688 /**
1689 offset 276 bit 29 */
1690 bool useIdleAdvanceWhileCoasting : 1 {};
1691 /**
1692 offset 276 bit 30 */
1693 bool unusedBit_104_30 : 1 {};
1694 /**
1695 offset 276 bit 31 */
1696 bool unusedBit_104_31 : 1 {};
1697 /**
1698 * Closed voltage for primary throttle position sensor
1699 * offset 280
1700 */
1702 /**
1703 * Fully opened voltage for primary throttle position sensor
1704 * offset 282
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 284
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 286
1719 */
1721 /**
1722 * offset 288
1723 */
1725 /**
1726 * Dwell duration while cranking
1727 * units: ms
1728 * offset 292
1729 */
1731 /**
1732 * Once engine speed passes this value, start reducing ETB angle.
1733 * units: rpm
1734 * offset 296
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 298
1741 */
1742 uint16_t etbRevLimitRange;
1743 /**
1744 * @see isMapAveragingEnabled
1745 * offset 300
1746 */
1748 /**
1749 * todo: merge with channel settings, use full-scale Thermistor here!
1750 * offset 440
1751 */
1753 /**
1754 * offset 472
1755 */
1757 /**
1758 * units: deg
1759 * offset 504
1760 */
1761 float launchTimingRetard;
1762 /**
1763 * Maximum commanded airmass for the idle controller.
1764 * units: mg
1765 * offset 508
1766 */
1767 scaled_channel<uint8_t, 1, 2> idleMaximumAirmass;
1768 /**
1769 * need 4 byte alignment
1770 * units: units
1771 * offset 509
1772 */
1773 uint8_t alignmentFill_at_509[1] = {};
1774 /**
1775 * iTerm min value
1776 * offset 510
1777 */
1778 int16_t alternator_iTermMin;
1779 /**
1780 * iTerm max value
1781 * offset 512
1782 */
1783 int16_t alternator_iTermMax;
1784 /**
1785 * need 4 byte alignment
1786 * units: units
1787 * offset 514
1788 */
1789 uint8_t alignmentFill_at_514[2] = {};
1790 /**
1791 * @@DISPLACEMENT_TOOLTIP@@
1792 * units: L
1793 * offset 516
1794 */
1795 float displacement;
1796 /**
1797 * units: RPM
1798 * offset 520
1799 */
1800 uint16_t triggerSimulatorRpm;
1801 /**
1802 * need 4 byte alignment
1803 * units: units
1804 * offset 522
1805 */
1806 uint8_t alignmentFill_at_522[2] = {};
1807 /**
1808 * Number of cylinder the engine has.
1809 * offset 524
1810 */
1811 uint32_t cylindersCount;
1812 /**
1813 * offset 528
1814 */
1816 /**
1817 * offset 529
1818 */
1819 uint8_t justATempTest;
1820 /**
1821 * Delta kPa/psi for MAP sync
1822 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
1823 * offset 530
1824 */
1825 uint8_t mapSyncThreshold;
1826 /**
1827 * need 4 byte alignment
1828 * units: units
1829 * offset 531
1830 */
1831 uint8_t alignmentFill_at_531[1] = {};
1832 /**
1833 * @@CYLINDER_BORE_TOOLTIP@@
1834 * units: mm
1835 * offset 532
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 536
1845 */
1846 engine_load_mode_e fuelAlgorithm;
1847 /**
1848 * units: %
1849 * offset 537
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 538
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 539
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 540
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 542
1870 */
1871 uint8_t boostControlMinTps;
1872 /**
1873 * need 4 byte alignment
1874 * units: units
1875 * offset 543
1876 */
1877 uint8_t alignmentFill_at_543[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 544
1881 */
1882 uint16_t boostControlMinMap;
1883 /**
1884 * Wastegate control Solenoid, set to 'NONE' if you are using DC wastegate
1885 * offset 546
1886 */
1888 /**
1889 * offset 548
1890 */
1892 /**
1893 * need 4 byte alignment
1894 * units: units
1895 * offset 549
1896 */
1897 uint8_t alignmentFill_at_549[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 552
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 556
1913 */
1915 /**
1916 * How many consecutive gap rations have to match expected ranges for sync to happen
1917 * units: count
1918 * offset 557
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 558
1925 */
1926 uint8_t maxIdleVss;
1927 /**
1928 * Allowed range around detection position
1929 * offset 559
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 560
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 562
1942 */
1944 /**
1945 * offset 563
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 564
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 568
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 572
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 576
1977 */
1978 float vbattDividerCoeff;
1979 /**
1980 * offset 580
1981 */
1983 /**
1984 * offset 582
1985 */
1987 /**
1988 * need 4 byte alignment
1989 * units: units
1990 * offset 583
1991 */
1992 uint8_t alignmentFill_at_583[1] = {};
1993 /**
1994 * Cooling fan turn-on temperature threshold, in Celsius
1995 * units: SPECIAL_CASE_TEMPERATURE
1996 * offset 584
1997 */
1998 int16_t fanOnTemperature;
1999 /**
2000 * Cooling fan turn-off temperature threshold, in Celsius
2001 * units: SPECIAL_CASE_TEMPERATURE
2002 * offset 586
2003 */
2004 int16_t fanOffTemperature;
2005 /**
2006 * offset 588
2007 */
2009 /**
2010 * offset 590
2011 */
2013 /**
2014 * need 4 byte alignment
2015 * units: units
2016 * offset 591
2017 */
2018 uint8_t alignmentFill_at_591[1] = {};
2019 /**
2020 * Cooling fan turn-on temperature threshold, in Celsius
2021 * units: SPECIAL_CASE_TEMPERATURE
2022 * offset 592
2023 */
2024 int16_t fan2OnTemperature;
2025 /**
2026 * Cooling fan turn-off temperature threshold, in Celsius
2027 * units: SPECIAL_CASE_TEMPERATURE
2028 * offset 594
2029 */
2030 int16_t fan2OffTemperature;
2031 /**
2032 * offset 596
2033 */
2034 int8_t disableFan1AtSpeed;
2035 /**
2036 * offset 597
2037 */
2038 int8_t disableFan2AtSpeed;
2039 /**
2040 * need 4 byte alignment
2041 * units: units
2042 * offset 598
2043 */
2044 uint8_t alignmentFill_at_598[2] = {};
2045 /**
2046 * Inhibit operation of this fan while the engine is not running.
2047 offset 600 bit 0 */
2048 bool disableFan1WhenStopped : 1 {};
2049 /**
2050 * Inhibit operation of this fan while the engine is not running.
2051 offset 600 bit 1 */
2052 bool disableFan2WhenStopped : 1 {};
2053 /**
2054 offset 600 bit 2 */
2055 bool unusedBit_170_2 : 1 {};
2056 /**
2057 offset 600 bit 3 */
2058 bool unusedBit_170_3 : 1 {};
2059 /**
2060 offset 600 bit 4 */
2061 bool unusedBit_170_4 : 1 {};
2062 /**
2063 offset 600 bit 5 */
2064 bool unusedBit_170_5 : 1 {};
2065 /**
2066 offset 600 bit 6 */
2067 bool unusedBit_170_6 : 1 {};
2068 /**
2069 offset 600 bit 7 */
2070 bool unusedBit_170_7 : 1 {};
2071 /**
2072 offset 600 bit 8 */
2073 bool unusedBit_170_8 : 1 {};
2074 /**
2075 offset 600 bit 9 */
2076 bool unusedBit_170_9 : 1 {};
2077 /**
2078 offset 600 bit 10 */
2079 bool unusedBit_170_10 : 1 {};
2080 /**
2081 offset 600 bit 11 */
2082 bool unusedBit_170_11 : 1 {};
2083 /**
2084 offset 600 bit 12 */
2085 bool unusedBit_170_12 : 1 {};
2086 /**
2087 offset 600 bit 13 */
2088 bool unusedBit_170_13 : 1 {};
2089 /**
2090 offset 600 bit 14 */
2091 bool unusedBit_170_14 : 1 {};
2092 /**
2093 offset 600 bit 15 */
2094 bool unusedBit_170_15 : 1 {};
2095 /**
2096 offset 600 bit 16 */
2097 bool unusedBit_170_16 : 1 {};
2098 /**
2099 offset 600 bit 17 */
2100 bool unusedBit_170_17 : 1 {};
2101 /**
2102 offset 600 bit 18 */
2103 bool unusedBit_170_18 : 1 {};
2104 /**
2105 offset 600 bit 19 */
2106 bool unusedBit_170_19 : 1 {};
2107 /**
2108 offset 600 bit 20 */
2109 bool unusedBit_170_20 : 1 {};
2110 /**
2111 offset 600 bit 21 */
2112 bool unusedBit_170_21 : 1 {};
2113 /**
2114 offset 600 bit 22 */
2115 bool unusedBit_170_22 : 1 {};
2116 /**
2117 offset 600 bit 23 */
2118 bool unusedBit_170_23 : 1 {};
2119 /**
2120 offset 600 bit 24 */
2121 bool unusedBit_170_24 : 1 {};
2122 /**
2123 offset 600 bit 25 */
2124 bool unusedBit_170_25 : 1 {};
2125 /**
2126 offset 600 bit 26 */
2127 bool unusedBit_170_26 : 1 {};
2128 /**
2129 offset 600 bit 27 */
2130 bool unusedBit_170_27 : 1 {};
2131 /**
2132 offset 600 bit 28 */
2133 bool unusedBit_170_28 : 1 {};
2134 /**
2135 offset 600 bit 29 */
2136 bool unusedBit_170_29 : 1 {};
2137 /**
2138 offset 600 bit 30 */
2139 bool unusedBit_170_30 : 1 {};
2140 /**
2141 offset 600 bit 31 */
2142 bool unusedBit_170_31 : 1 {};
2143 /**
2144 * offset 604
2145 */
2147 /**
2148 * offset 608
2149 */
2151 /**
2152 * need 4 byte alignment
2153 * units: units
2154 * offset 610
2155 */
2156 uint8_t alignmentFill_at_610[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 612
2161 */
2162 float driveWheelRevPerKm;
2163 /**
2164 * CANbus thread period in ms
2165 * units: ms
2166 * offset 616
2167 */
2168 int canSleepPeriodMs;
2169 /**
2170 * units: index
2171 * offset 620
2172 */
2174 /**
2175 * First analog throttle body, first sensor. See also pedalPositionAdcChannel
2176 * Analog TPS inputs have 200Hz low-pass cutoff.
2177 * offset 624
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 625
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 626
2188 */
2190 /**
2191 * Second throttle body position sensor, single channel so far
2192 * offset 627
2193 */
2195 /**
2196 * 0.1 is a good default value
2197 * units: x
2198 * offset 628
2199 */
2201 /**
2202 * offset 632
2203 */
2205 /**
2206 * Extra air taper amount
2207 * units: %
2208 * offset 644
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 648
2215 */
2217 /**
2218 * offset 649
2219 */
2221 /**
2222 * offset 650
2223 */
2224 uint8_t acrRevolutions;
2225 /**
2226 * need 4 byte alignment
2227 * units: units
2228 * offset 651
2229 */
2230 uint8_t alignmentFill_at_651[1] = {};
2231 /**
2232 * offset 652
2233 */
2235 /**
2236 * units: volts
2237 * offset 656
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 660
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 664
2249 */
2250 brain_input_pin_e camInputs[CAM_INPUTS_COUNT] = {};
2251 /**
2252 * offset 672
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 692
2261 */
2263 /**
2264 * TPS/PPS error threshold
2265 * units: %
2266 * offset 693
2267 */
2268 scaled_channel<uint8_t, 10, 1> etbSplit;
2269 /**
2270 * offset 694
2271 */
2273 /**
2274 * offset 696
2275 */
2277 /**
2278 * offset 697
2279 */
2281 /**
2282 * need 4 byte alignment
2283 * units: units
2284 * offset 698
2285 */
2286 uint8_t alignmentFill_at_698[2] = {};
2287 /**
2288 * @see hasBaroSensor
2289 * offset 700
2290 */
2292 /**
2293 * offset 712
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 724
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 725
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 726
2311 */
2313 /**
2314 * offset 727
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 728
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 730
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 731
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 732
2337 */
2339 /**
2340 * need 4 byte alignment
2341 * units: units
2342 * offset 733
2343 */
2344 uint8_t alignmentFill_at_733[1] = {};
2345 /**
2346 * offset 734
2347 */
2348 Gpio l9779_cs;
2349 /**
2350 * offset 736
2351 */
2352 output_pin_e injectionPins[MAX_CYLINDER_COUNT] = {};
2353 /**
2354 * offset 760
2355 */
2356 output_pin_e ignitionPins[MAX_CYLINDER_COUNT] = {};
2357 /**
2358 * offset 784
2359 */
2361 /**
2362 * offset 785
2363 */
2365 /**
2366 * offset 786
2367 */
2369 /**
2370 * offset 788
2371 */
2373 /**
2374 * How many consecutive VVT gap rations have to match expected ranges for sync to happen
2375 * units: count
2376 * offset 789
2377 */
2379 /**
2380 * Check engine light, also malfunction indicator light. Always blinks once on boot.
2381 * offset 790
2382 */
2384 /**
2385 * offset 792
2386 */
2388 /**
2389 * need 4 byte alignment
2390 * units: units
2391 * offset 793
2392 */
2393 uint8_t alignmentFill_at_793[1] = {};
2394 /**
2395 * Some cars have a switch to indicate that clutch pedal is all the way down
2396 * offset 794
2397 */
2399 /**
2400 * offset 796
2401 */
2403 /**
2404 * offset 798
2405 */
2407 /**
2408 * offset 799
2409 */
2411 /**
2412 * offset 800
2413 */
2414 Gpio digitalPotentiometerChipSelect[DIGIPOT_COUNT] = {};
2415 /**
2416 * offset 808
2417 */
2419 /**
2420 * offset 809
2421 */
2423 /**
2424 * offset 810
2425 */
2427 /**
2428 * Digital Potentiometer is used by stock ECU stimulation code
2429 * offset 812
2430 */
2432 /**
2433 * offset 813
2434 */
2436 /**
2437 * offset 814
2438 */
2440 /**
2441 * offset 816
2442 */
2444 /**
2445 * Useful in Research&Development phase
2446 * offset 817
2447 */
2449 /**
2450 * First throttle body, second sensor.
2451 * offset 818
2452 */
2454 /**
2455 * Second throttle body, second sensor.
2456 * offset 819
2457 */
2459 /**
2460 * Electronic throttle pedal position input
2461 * Second channel
2462 * See also tps1_1AdcChannel
2463 * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
2464 * offset 820
2465 */
2467 /**
2468 * AFR, WBO, EGO - whatever you like to call it
2469 * offset 821
2470 */
2472 /**
2473 * offset 822
2474 */
2475 Gpio mc33810_cs[C_MC33810_COUNT] = {};
2476 /**
2477 * 0.1 is a good default value
2478 * units: x
2479 * offset 824
2480 */
2481 float idle_antiwindupFreq;
2482 /**
2483 * offset 828
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 832
2490 */
2491 uint16_t mc33_t_min_boost;
2492 /**
2493 * Ratio between the wheels and your transmission output.
2494 * units: ratio
2495 * offset 834
2496 */
2497 scaled_channel<uint16_t, 100, 1> finalGearRatio;
2498 /**
2499 * offset 836
2500 */
2502 /**
2503 * offset 838
2504 */
2506 /**
2507 * need 4 byte alignment
2508 * units: units
2509 * offset 839
2510 */
2511 uint8_t alignmentFill_at_839[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 840
2516 */
2517 Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT] = {};
2518 /**
2519 * units: g/s
2520 * offset 844
2521 */
2522 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
2523 /**
2524 * offset 846
2525 */
2526 pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT] = {};
2527 /**
2528 * offset 848
2529 */
2531 /**
2532 * need 4 byte alignment
2533 * units: units
2534 * offset 849
2535 */
2536 uint8_t alignmentFill_at_849[1] = {};
2537 /**
2538 * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
2539 * offset 850
2540 */
2542 /**
2543 * offset 852
2544 */
2546 /**
2547 * units: RPM
2548 * offset 853
2549 */
2550 scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
2551 /**
2552 * units: %
2553 * offset 854
2554 */
2555 scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
2556 /**
2557 * need 4 byte alignment
2558 * units: units
2559 * offset 855
2560 */
2561 uint8_t alignmentFill_at_855[1] = {};
2562 /**
2563 offset 856 bit 0 */
2564 bool is_enabled_spi_1 : 1 {};
2565 /**
2566 offset 856 bit 1 */
2567 bool is_enabled_spi_2 : 1 {};
2568 /**
2569 offset 856 bit 2 */
2570 bool is_enabled_spi_3 : 1 {};
2571 /**
2572 offset 856 bit 3 */
2573 bool isSdCardEnabled : 1 {};
2574 /**
2575 * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
2576 offset 856 bit 4 */
2577 bool rusefiVerbose29b : 1 {};
2578 /**
2579 offset 856 bit 5 */
2580 bool rethrowHardFault : 1 {};
2581 /**
2582 offset 856 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 856 bit 7 */
2587 bool useStepperIdle : 1 {};
2588 /**
2589 offset 856 bit 8 */
2590 bool lambdaProtectionEnable : 1 {};
2591 /**
2592 offset 856 bit 9 */
2593 bool verboseTLE8888 : 1 {};
2594 /**
2595 * CAN broadcast using custom rusEFI protocol
2596 offset 856 bit 10 */
2597 bool enableVerboseCanTx : 1 {};
2598 /**
2599 offset 856 bit 11 */
2600 bool externalRusEfiGdiModule : 1 {};
2601 /**
2602 * Useful for individual intakes
2603 offset 856 bit 12 */
2604 bool measureMapOnlyInOneCylinder : 1 {};
2605 /**
2606 offset 856 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 856 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 856 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 856 bit 16 */
2619 bool useIacTableForCoasting : 1 {};
2620 /**
2621 offset 856 bit 17 */
2622 bool useNoiselessTriggerDecoder : 1 {};
2623 /**
2624 offset 856 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 856 bit 19 */
2629 bool disableEtbWhenEngineStopped : 1 {};
2630 /**
2631 offset 856 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 856 bit 21 */
2637 bool pauseEtbControl : 1 {};
2638 /**
2639 offset 856 bit 22 */
2640 bool verboseKLine : 1 {};
2641 /**
2642 offset 856 bit 23 */
2643 bool idleIncrementalPidCic : 1 {};
2644 /**
2645 * AEM X-Series or rusEFI Wideband
2646 offset 856 bit 24 */
2647 bool enableAemXSeries : 1 {};
2648 /**
2649 offset 856 bit 25 */
2650 bool modeledFlowIdle : 1 {};
2651 /**
2652 offset 856 bit 26 */
2653 bool isTuningDetectorEnabled : 1 {};
2654 /**
2655 offset 856 bit 27 */
2657 /**
2658 offset 856 bit 28 */
2659 bool unusedBit_311_30 : 1 {};
2660 /**
2661 offset 856 bit 29 */
2662 bool unusedBit_311_31 : 1 {};
2663 /**
2664 offset 856 bit 30 */
2665 bool unusedBit_315_30 : 1 {};
2666 /**
2667 offset 856 bit 31 */
2668 bool unusedBit_315_31 : 1 {};
2669 /**
2670 * offset 860
2671 */
2672 brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT] = {};
2673 /**
2674 * offset 868
2675 */
2677 /**
2678 * need 4 byte alignment
2679 * units: units
2680 * offset 869
2681 */
2682 uint8_t alignmentFill_at_869[3] = {};
2683 /**
2684 * offset 872
2685 */
2686 uint32_t verboseCanBaseAddress;
2687 /**
2688 * Boost Voltage
2689 * units: v
2690 * offset 876
2691 */
2692 uint8_t mc33_hvolt;
2693 /**
2694 * need 4 byte alignment
2695 * units: units
2696 * offset 877
2697 */
2698 uint8_t alignmentFill_at_877[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 878
2703 */
2705 /**
2706 * units: %
2707 * offset 880
2708 */
2710 /**
2711 * units: %
2712 * offset 881
2713 */
2715 /**
2716 * offset 882
2717 */
2719 /**
2720 * offset 883
2721 */
2723 /**
2724 * offset 884
2725 */
2727 /**
2728 * need 4 byte alignment
2729 * units: units
2730 * offset 885
2731 */
2732 uint8_t alignmentFill_at_885[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 886
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 888
2744 */
2745 scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
2746 /**
2747 * offset 890
2748 */
2750 /**
2751 * offset 892
2752 */
2754 /**
2755 * offset 894
2756 */
2758 /**
2759 * Some vehicles have a switch to indicate that clutch pedal is all the way up
2760 * offset 896
2761 */
2763 /**
2764 * offset 898
2765 */
2767 /**
2768 * offset 899
2769 */
2771 /**
2772 * offset 900
2773 */
2774 Gpio max31855_cs[EGT_CHANNEL_COUNT] = {};
2775 /**
2776 * Continental/GM flex fuel sensor, 50-150hz type
2777 * offset 916
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 918
2784 */
2785 uint16_t torqueReductionArmingRpm;
2786 /**
2787 * offset 920
2788 */
2790 /**
2791 * offset 921
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 922
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 923
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 924
2810 */
2811 uint16_t sdCardLogFrequency;
2812 /**
2813 * offset 926
2814 */
2816 /**
2817 * need 4 byte alignment
2818 * units: units
2819 * offset 927
2820 */
2821 uint8_t alignmentFill_at_927[1] = {};
2822 /**
2823 * offset 928
2824 */
2825 uint16_t launchCorrectionsEndRpm;
2826 /**
2827 * offset 930
2828 */
2830 /**
2831 * On some vehicles we can disable starter once engine is already running
2832 * offset 932
2833 */
2835 /**
2836 * need 4 byte alignment
2837 * units: units
2838 * offset 933
2839 */
2840 uint8_t alignmentFill_at_933[1] = {};
2841 /**
2842 * Some Subaru and some Mazda use double-solenoid idle air valve
2843 * offset 934
2844 */
2846 /**
2847 * See also starterControlPin
2848 * offset 936
2849 */
2851 /**
2852 * units: RPM
2853 * offset 938
2854 */
2855 scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
2856 /**
2857 * offset 939
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 940
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 944
2870 */
2872 /**
2873 * units: %
2874 * offset 946
2875 */
2877 /**
2878 * Closed voltage for secondary throttle position sensor
2879 * offset 948
2880 */
2882 /**
2883 * Fully opened voltage for secondary throttle position sensor
2884 * offset 950
2885 */
2887 /**
2888 * Maximum time to crank starter when start/stop button is pressed
2889 * units: Seconds
2890 * offset 952
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 954
2896 */
2898 /**
2899 * offset 956
2900 */
2902 /**
2903 * need 4 byte alignment
2904 * units: units
2905 * offset 957
2906 */
2907 uint8_t alignmentFill_at_957[1] = {};
2908 /**
2909 * offset 958
2910 */
2912 /**
2913 * units: %
2914 * offset 960
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 961
2921 */
2922 scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
2923 /**
2924 * need 4 byte alignment
2925 * units: units
2926 * offset 962
2927 */
2928 uint8_t alignmentFill_at_962[2] = {};
2929 /**
2930 * offset 964
2931 */
2932 script_setting_t scriptSetting[SCRIPT_SETTING_COUNT] = {};
2933 /**
2934 * offset 996
2935 */
2937 /**
2938 * offset 998
2939 */
2941 /**
2942 * offset 1000
2943 */
2945 /**
2946 * offset 1002
2947 */
2949 /**
2950 * offset 1004
2951 */
2953 /**
2954 * offset 1006
2955 */
2957 /**
2958 * offset 1008
2959 */
2961 /**
2962 * offset 1010
2963 */
2965 /**
2966 * offset 1012
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 1014
2975 */
2977 /**
2978 * offset 1016
2979 */
2981 /**
2982 * need 4 byte alignment
2983 * units: units
2984 * offset 1017
2985 */
2986 uint8_t alignmentFill_at_1017[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 1020 bit 0 */
2990 bool idleReturnTargetRamp : 1 {};
2991 /**
2992 offset 1020 bit 1 */
2994 /**
2995 * If enabled we use two H-bridges to drive stepper idle air valve
2996 offset 1020 bit 2 */
2998 /**
2999 offset 1020 bit 3 */
3000 bool multisparkEnable : 1 {};
3001 /**
3002 offset 1020 bit 4 */
3003 bool enableLaunchRetard : 1 {};
3004 /**
3005 offset 1020 bit 5 */
3006 bool canInputBCM : 1 {};
3007 /**
3008 * This property is useful if using rusEFI as TCM or BCM only
3009 offset 1020 bit 6 */
3010 bool consumeObdSensors : 1 {};
3011 /**
3012 * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
3013 offset 1020 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 1020 bit 8 */
3018 bool stftIgnoreErrorMagnitude : 1 {};
3019 /**
3020 offset 1020 bit 9 */
3022 /**
3023 offset 1020 bit 10 */
3024 bool enableSoftwareKnock : 1 {};
3025 /**
3026 * Verbose info in console below engineSnifferRpmThreshold
3027 offset 1020 bit 11 */
3028 bool verboseVVTDecoding : 1 {};
3029 /**
3030 offset 1020 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 1020 bit 13 */
3035 bool alphaNUseIat : 1 {};
3036 /**
3037 offset 1020 bit 14 */
3038 bool knockBankCyl1 : 1 {};
3039 /**
3040 offset 1020 bit 15 */
3041 bool knockBankCyl2 : 1 {};
3042 /**
3043 offset 1020 bit 16 */
3044 bool knockBankCyl3 : 1 {};
3045 /**
3046 offset 1020 bit 17 */
3047 bool knockBankCyl4 : 1 {};
3048 /**
3049 offset 1020 bit 18 */
3050 bool knockBankCyl5 : 1 {};
3051 /**
3052 offset 1020 bit 19 */
3053 bool knockBankCyl6 : 1 {};
3054 /**
3055 offset 1020 bit 20 */
3056 bool knockBankCyl7 : 1 {};
3057 /**
3058 offset 1020 bit 21 */
3059 bool knockBankCyl8 : 1 {};
3060 /**
3061 offset 1020 bit 22 */
3062 bool knockBankCyl9 : 1 {};
3063 /**
3064 offset 1020 bit 23 */
3065 bool knockBankCyl10 : 1 {};
3066 /**
3067 offset 1020 bit 24 */
3068 bool knockBankCyl11 : 1 {};
3069 /**
3070 offset 1020 bit 25 */
3071 bool knockBankCyl12 : 1 {};
3072 /**
3073 offset 1020 bit 26 */
3074 bool tcuEnabled : 1 {};
3075 /**
3076 offset 1020 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 1020 bit 28 */
3082 /**
3083 * Print incoming and outgoing second bus CAN messages in rusEFI console
3084 offset 1020 bit 29 */
3085 bool verboseCan2 : 1 {};
3086 /**
3087 offset 1020 bit 30 */
3088 bool unusedBit_412_30 : 1 {};
3089 /**
3090 offset 1020 bit 31 */
3091 bool unusedBit_412_31 : 1 {};
3092 /**
3093 * offset 1024
3094 */
3095 dc_io etbIo[ETB_COUNT] = {};
3096 /**
3097 * offset 1040
3098 */
3100 /**
3101 * offset 1042
3102 */
3104 /**
3105 * offset 1044
3106 */
3108 /**
3109 * offset 1064
3110 */
3112 /**
3113 * offset 1065
3114 */
3116 /**
3117 * offset 1066
3118 */
3120 /**
3121 * units: Hz
3122 * offset 1068
3123 */
3125 /**
3126 * offset 1072
3127 */
3129 /**
3130 * offset 1073
3131 */
3133 /**
3134 * offset 1074
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 1075
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 1076
3147 */
3149 /**
3150 * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
3151 * units: coeff
3152 * offset 1080
3153 */
3155 /**
3156 * Selects the acceleration enrichment strategy.
3157 * offset 1084
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 1085
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 1086
3170 */
3171 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterAccelTime;
3172 /**
3173 * need 4 byte alignment
3174 * units: units
3175 * offset 1087
3176 */
3177 uint8_t alignmentFill_at_1087[1] = {};
3178 /**
3179 * Launch disabled above this speed if setting is above zero
3180 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
3181 * offset 1088
3182 */
3184 /**
3185 * Starting Launch RPM window to activate (subtracts from Launch RPM)
3186 * units: RPM
3187 * offset 1092
3188 */
3189 int launchRpmWindow;
3190 /**
3191 * units: ms
3192 * offset 1096
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 1100
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 1104
3206 */
3207 float mapExpAverageAlpha;
3208 /**
3209 * offset 1108
3210 */
3212 /**
3213 * offset 1112
3214 */
3215 float turbochargerFilter;
3216 /**
3217 * offset 1116
3218 */
3220 /**
3221 * offset 1120
3222 */
3223 float launchActivateDelay;
3224 /**
3225 * offset 1124
3226 */
3227 stft_s stft;
3228 /**
3229 * offset 1152
3230 */
3231 ltft_s ltft;
3232 /**
3233 * offset 1168
3234 */
3235 dc_io stepperDcIo[DC_PER_STEPPER] = {};
3236 /**
3237 * For example, BMW, GM or Chevrolet
3238 * REQUIRED for rusEFI Online
3239 * offset 1184
3240 */
3242 /**
3243 * For example, LS1 or NB2
3244 * REQUIRED for rusEFI Online
3245 * offset 1216
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 1248
3253 */
3255 /**
3256 * offset 1280
3257 */
3258 output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT] = {};
3259 /**
3260 * offset 1292
3261 */
3262 dc_function_e etbFunctions[ETB_COUNT] = {};
3263 /**
3264 * offset 1294
3265 */
3267 /**
3268 * need 4 byte alignment
3269 * units: units
3270 * offset 1295
3271 */
3272 uint8_t alignmentFill_at_1295[1] = {};
3273 /**
3274 * offset 1296
3275 */
3277 /**
3278 * offset 1298
3279 */
3281 /**
3282 * need 4 byte alignment
3283 * units: units
3284 * offset 1299
3285 */
3286 uint8_t alignmentFill_at_1299[1] = {};
3287 /**
3288 * offset 1300
3289 */
3291 /**
3292 * offset 1302
3293 */
3294 output_pin_e luaOutputPins[LUA_PWM_COUNT] = {};
3295 /**
3296 * need 4 byte alignment
3297 * units: units
3298 * offset 1318
3299 */
3300 uint8_t alignmentFill_at_1318[2] = {};
3301 /**
3302 * Angle between cam sensor and VVT zero position
3303 * units: value
3304 * offset 1320
3305 */
3306 float vvtOffsets[CAM_INPUTS_COUNT] = {};
3307 /**
3308 * offset 1336
3309 */
3310 vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT] = {};
3311 /**
3312 * offset 1384
3313 */
3314 gppwm_note_t gpPwmNote[GPPWM_CHANNELS] = {};
3315 /**
3316 * Closed voltage for secondary throttle position sensor
3317 * offset 1448
3318 */
3320 /**
3321 * Fully opened voltage for secondary throttle position sensor
3322 * offset 1450
3323 */
3325 /**
3326 * Select which bus the wideband controller is attached to.
3327 offset 1452 bit 0 */
3328 bool widebandOnSecondBus : 1 {};
3329 /**
3330 * Enables lambda sensor closed loop feedback for fuelling.
3331 offset 1452 bit 1 */
3333 /**
3334 * Write SD card log even when powered by USB
3335 offset 1452 bit 2 */
3336 bool alwaysWriteSdCard : 1 {};
3337 /**
3338 * Second harmonic (aka double) is usually quieter background noise
3339 offset 1452 bit 3 */
3341 /**
3342 * Unlocking only via rusEFI console using 'unlock PICODEBUG' command. Use 'reset to default firmware' if pincode is lost.
3343 offset 1452 bit 4 */
3344 bool yesUnderstandLocking : 1 {};
3345 /**
3346 * Sometimes we have a performance issue while printing error
3347 offset 1452 bit 5 */
3348 bool silentTriggerError : 1 {};
3349 /**
3350 offset 1452 bit 6 */
3351 bool useLinearCltSensor : 1 {};
3352 /**
3353 * enable can_read/disable can_read
3354 offset 1452 bit 7 */
3355 bool canReadEnabled : 1 {};
3356 /**
3357 * enable can_write/disable can_write. See also can1ListenMode
3358 offset 1452 bit 8 */
3359 bool canWriteEnabled : 1 {};
3360 /**
3361 offset 1452 bit 9 */
3362 bool useLinearIatSensor : 1 {};
3363 /**
3364 offset 1452 bit 10 */
3365 bool enableOilPressureProtect : 1 {};
3366 /**
3367 * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
3368 offset 1452 bit 11 */
3369 bool tachPulseDurationAsDutyCycle : 1 {};
3370 /**
3371 * This enables smart alternator control and activates the extra alternator settings.
3372 offset 1452 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 1452 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 1452 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 1452 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 1452 bit 16 */
3392 bool cutSparkOnHardLimit : 1 {};
3393 /**
3394 offset 1452 bit 17 */
3395 bool launchFuelCutEnable : 1 {};
3396 /**
3397 * This is the Cut Mode normally used
3398 offset 1452 bit 18 */
3399 bool launchSparkCutEnable : 1 {};
3400 /**
3401 offset 1452 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 1452 bit 20 */
3407 /**
3408 offset 1452 bit 21 */
3409 bool limitTorqueReductionTime : 1 {};
3410 /**
3411 * Are you a developer troubleshooting TS over CAN ISO/TP?
3412 offset 1452 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 1452 bit 23 */
3417 bool engineSnifferFocusOnInputs : 1 {};
3418 /**
3419 offset 1452 bit 24 */
3420 bool twoStroke : 1 {};
3421 /**
3422 * Where is your primary skipped wheel located?
3423 offset 1452 bit 25 */
3424 bool skippedWheelOnCam : 1 {};
3425 /**
3426 offset 1452 bit 26 */
3427 bool unusedBit_488_26 : 1 {};
3428 /**
3429 offset 1452 bit 27 */
3430 bool unusedBit_488_27 : 1 {};
3431 /**
3432 offset 1452 bit 28 */
3433 bool unusedBit_488_28 : 1 {};
3434 /**
3435 offset 1452 bit 29 */
3436 bool unusedBit_488_29 : 1 {};
3437 /**
3438 offset 1452 bit 30 */
3439 bool unusedBit_488_30 : 1 {};
3440 /**
3441 offset 1452 bit 31 */
3442 bool unusedBit_488_31 : 1 {};
3443 /**
3444 * A/C button input
3445 * offset 1456
3446 */
3448 /**
3449 * offset 1458
3450 */
3452 /**
3453 * Expected neutral position
3454 * units: %
3455 * offset 1459
3456 */
3457 uint8_t etbNeutralPosition;
3458 /**
3459 * See also idleRpmPid
3460 * offset 1460
3461 */
3463 /**
3464 * need 4 byte alignment
3465 * units: units
3466 * offset 1461
3467 */
3468 uint8_t alignmentFill_at_1461[3] = {};
3469 /**
3470 offset 1464 bit 0 */
3471 bool isInjectionEnabled : 1 {};
3472 /**
3473 offset 1464 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 1464 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 1464 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 1464 bit 4 */
3486 bool alwaysInstantRpm : 1 {};
3487 /**
3488 offset 1464 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 1464 bit 6 */
3493 bool useSeparateAdvanceForIdle : 1 {};
3494 /**
3495 offset 1464 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 1464 bit 8 */
3500 bool useSeparateVeForIdle : 1 {};
3501 /**
3502 * Verbose info in console below engineSnifferRpmThreshold
3503 offset 1464 bit 9 */
3504 bool verboseTriggerSynchDetails : 1 {};
3505 /**
3506 offset 1464 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 1464 bit 11 */
3511 bool twoWireBatchIgnition : 1 {};
3512 /**
3513 * Read MAP sensor on ECU start-up to use as baro value.
3514 offset 1464 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 1464 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 1464 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 1464 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 1464 bit 16 */
3533 bool useIacPidMultTable : 1 {};
3534 /**
3535 offset 1464 bit 17 */
3536 bool isBoostControlEnabled : 1 {};
3537 /**
3538 * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
3539 offset 1464 bit 18 */
3540 bool launchSmoothRetard : 1 {};
3541 /**
3542 * Some engines are OK running semi-random sequential while other engine require phase synchronization
3543 offset 1464 bit 19 */
3545 /**
3546 * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
3547 offset 1464 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 1464 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 1464 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 1464 bit 23 */
3561 bool invertVvtControlExhaust : 1 {};
3562 /**
3563 offset 1464 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 1464 bit 25 */
3568 bool sdTriggerLog : 1 {};
3569 /**
3570 offset 1464 bit 26 */
3571 bool stepper_dc_use_two_wires : 1 {};
3572 /**
3573 offset 1464 bit 27 */
3574 bool watchOutForLinearTime : 1 {};
3575 /**
3576 offset 1464 bit 28 */
3577 bool unusedBit_527_28 : 1 {};
3578 /**
3579 offset 1464 bit 29 */
3580 bool unusedBit_527_29 : 1 {};
3581 /**
3582 offset 1464 bit 30 */
3583 bool unusedBit_527_30 : 1 {};
3584 /**
3585 offset 1464 bit 31 */
3586 bool unusedBit_527_31 : 1 {};
3587 /**
3588 * units: count
3589 * offset 1468
3590 */
3591 uint32_t engineChartSize;
3592 /**
3593 * units: mult
3594 * offset 1472
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 1476
3601 */
3602 int16_t acIdleRpmTarget;
3603 /**
3604 * set warningPeriod X
3605 * units: seconds
3606 * offset 1478
3607 */
3608 int16_t warningPeriod;
3609 /**
3610 * units: angle
3611 * offset 1480
3612 */
3614 /**
3615 * units: ms
3616 * offset 1484
3617 */
3619 /**
3620 * units: count
3621 * offset 1488
3622 */
3624 /**
3625 * Pedal position to realize that we need to reduce torque when the trigger pin is triggered
3626 * offset 1492
3627 */
3629 /**
3630 * offset 1496
3631 */
3633 /**
3634 * offset 1500
3635 */
3637 /**
3638 * offset 1504
3639 */
3641 /**
3642 * Duration in ms or duty cycle depending on selected mode
3643 * offset 1508
3644 */
3646 /**
3647 * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
3648 * units: Seconds
3649 * offset 1512
3650 */
3651 float wwaeTau;
3652 /**
3653 * offset 1516
3654 */
3656 /**
3657 * offset 1536
3658 */
3659 pid_s etb;
3660 /**
3661 * RPM range above upper limit for extra air taper
3662 * units: RPM
3663 * offset 1556
3664 */
3665 int16_t airTaperRpmRange;
3666 /**
3667 * offset 1558
3668 */
3670 /**
3671 * Closed voltage for primary throttle position sensor
3672 * offset 1560
3673 */
3675 /**
3676 * Fully opened voltage for primary throttle position sensor
3677 * offset 1562
3678 */
3680 /**
3681 * See also startStopButtonPin
3682 * offset 1564
3683 */
3685 /**
3686 * offset 1566
3687 */
3689 /**
3690 * need 4 byte alignment
3691 * units: units
3692 * offset 1567
3693 */
3694 uint8_t alignmentFill_at_1567[1] = {};
3695 /**
3696 * offset 1568
3697 */
3699 /**
3700 * offset 1570
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 1572
3707 */
3709 /**
3710 * kPa/psi value which is too high to be true
3711 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
3712 * offset 1576
3713 */
3715 /**
3716 * How long to wait for the spark to fire before recharging the coil for another spark.
3717 * units: ms
3718 * offset 1580
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 1582
3725 */
3726 scaled_channel<uint16_t, 1000, 1> multisparkDwell;
3727 /**
3728 * See cltIdleRpmBins
3729 * offset 1584
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 1604
3736 */
3737 float wwaeBeta;
3738 /**
3739 * See also EFI_CONSOLE_RX_BRAIN_PIN
3740 * offset 1608
3741 */
3743 /**
3744 * offset 1610
3745 */
3747 /**
3748 * offset 1612
3749 */
3750 Gpio auxValves[AUX_DIGITAL_VALVE_COUNT] = {};
3751 /**
3752 * offset 1616
3753 */
3755 /**
3756 * offset 1618
3757 */
3759 /**
3760 * units: volts
3761 * offset 1620
3762 */
3764 /**
3765 * Pedal in the floor
3766 * units: volts
3767 * offset 1624
3768 */
3770 /**
3771 * on IGN voltage detection turn fuel pump on to build fuel pressure
3772 * units: seconds
3773 * offset 1628
3774 */
3776 /**
3777 * larger value = larger intake manifold volume
3778 * offset 1630
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 1632
3785 */
3786 int16_t idlePidRpmDeadZone;
3787 /**
3788 * need 4 byte alignment
3789 * units: units
3790 * offset 1634
3791 */
3792 uint8_t alignmentFill_at_1634[2] = {};
3793 /**
3794 * See Over/Undervoltage Shutdown/Retry bit in documentation
3795 offset 1636 bit 0 */
3796 bool mc33810DisableRecoveryMode : 1 {};
3797 /**
3798 offset 1636 bit 1 */
3799 bool mc33810Gpgd0Mode : 1 {};
3800 /**
3801 offset 1636 bit 2 */
3802 bool mc33810Gpgd1Mode : 1 {};
3803 /**
3804 offset 1636 bit 3 */
3805 bool mc33810Gpgd2Mode : 1 {};
3806 /**
3807 offset 1636 bit 4 */
3808 bool mc33810Gpgd3Mode : 1 {};
3809 /**
3810 * Send out board statistics
3811 offset 1636 bit 5 */
3812 bool enableExtendedCanBroadcast : 1 {};
3813 /**
3814 * global_can_data performance hack
3815 offset 1636 bit 6 */
3816 bool luaCanRxWorkaround : 1 {};
3817 /**
3818 offset 1636 bit 7 */
3819 bool flexSensorInverted : 1 {};
3820 /**
3821 offset 1636 bit 8 */
3822 bool useHardSkipInTraction : 1 {};
3823 /**
3824 * Use Aux Speed 1 as one of speeds for wheel slip ratio?
3825 offset 1636 bit 9 */
3826 bool useAuxSpeedForSlipRatio : 1 {};
3827 /**
3828 * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
3829 offset 1636 bit 10 */
3830 bool useVssAsSecondWheelSpeed : 1 {};
3831 /**
3832 offset 1636 bit 11 */
3833 bool is_enabled_spi_5 : 1 {};
3834 /**
3835 offset 1636 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 1636 bit 13 */
3840 bool enableAemXSeriesEgt : 1 {};
3841 /**
3842 offset 1636 bit 14 */
3843 bool startRequestPinInverted : 1 {};
3844 /**
3845 offset 1636 bit 15 */
3846 bool tcu_rangeSensorPulldown : 1 {};
3847 /**
3848 offset 1636 bit 16 */
3849 bool devBit01 : 1 {};
3850 /**
3851 offset 1636 bit 17 */
3852 bool devBit0 : 1 {};
3853 /**
3854 offset 1636 bit 18 */
3855 bool devBit1 : 1 {};
3856 /**
3857 offset 1636 bit 19 */
3858 bool devBit2 : 1 {};
3859 /**
3860 offset 1636 bit 20 */
3861 bool devBit3 : 1 {};
3862 /**
3863 offset 1636 bit 21 */
3864 bool devBit4 : 1 {};
3865 /**
3866 offset 1636 bit 22 */
3867 bool devBit5 : 1 {};
3868 /**
3869 offset 1636 bit 23 */
3870 bool devBit6 : 1 {};
3871 /**
3872 offset 1636 bit 24 */
3873 bool devBit7 : 1 {};
3874 /**
3875 offset 1636 bit 25 */
3876 bool invertExhaustCamVVTSignal : 1 {};
3877 /**
3878 * "Available via TS Plugin see https://rusefi.com/s/knock"
3879 offset 1636 bit 26 */
3880 bool enableKnockSpectrogram : 1 {};
3881 /**
3882 offset 1636 bit 27 */
3883 bool enableKnockSpectrogramFilter : 1 {};
3884 /**
3885 offset 1636 bit 28 */
3886 bool unusedBit_600_28 : 1 {};
3887 /**
3888 offset 1636 bit 29 */
3889 bool unusedBit_600_29 : 1 {};
3890 /**
3891 offset 1636 bit 30 */
3892 bool unusedBit_600_30 : 1 {};
3893 /**
3894 offset 1636 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 1640
3900 */
3901 int16_t iacByTpsTaper;
3902 /**
3903 * offset 1642
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 1644
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 1645
3916 */
3917 uint8_t coastingFuelCutVssHigh;
3918 /**
3919 * need 4 byte alignment
3920 * units: units
3921 * offset 1646
3922 */
3923 uint8_t alignmentFill_at_1646[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 1648
3928 */
3930 /**
3931 * offset 1652
3932 */
3933 brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT] = {};
3934 /**
3935 * offset 1656
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 1657
3941 */
3943 /**
3944 * See http://rusefi.com/s/debugmode
3945 * offset 1658
3946 */
3948 /**
3949 * Additional idle % when fan #1 is active
3950 * units: %
3951 * offset 1659
3952 */
3953 uint8_t fan1ExtraIdle;
3954 /**
3955 * Band rate for primary TTL
3956 * units: BPs
3957 * offset 1660
3958 */
3959 uint32_t uartConsoleSerialSpeed;
3960 /**
3961 * units: volts
3962 * offset 1664
3963 */
3965 /**
3966 * Pedal in the floor
3967 * units: volts
3968 * offset 1668
3969 */
3971 /**
3972 * offset 1672
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 1673
3979 */
3981 /**
3982 * offset 1674
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 1675
3989 */
3991 /**
3992 * units: A
3993 * offset 1676
3994 */
3995 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3996 /**
3997 * units: A
3998 * offset 1677
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 1678
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 1679
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 1680 bit 0 */
4016 bool stepperDcInvertedPins : 1 {};
4017 /**
4018 * Allow OpenBLT on Primary CAN
4019 offset 1680 bit 1 */
4020 bool canOpenBLT : 1 {};
4021 /**
4022 * Allow OpenBLT on Secondary CAN
4023 offset 1680 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 1680 bit 3 */
4028 bool injectorFlowAsMassFlow : 1 {};
4029 /**
4030 offset 1680 bit 4 */
4031 bool boardUseCanTerminator : 1 {};
4032 /**
4033 offset 1680 bit 5 */
4034 bool kLineDoHondaSend : 1 {};
4035 /**
4036 * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
4037 offset 1680 bit 6 */
4038 bool can1ListenMode : 1 {};
4039 /**
4040 offset 1680 bit 7 */
4041 bool can2ListenMode : 1 {};
4042 /**
4043 offset 1680 bit 8 */
4044 bool unusedBit_634_8 : 1 {};
4045 /**
4046 offset 1680 bit 9 */
4047 bool unusedBit_634_9 : 1 {};
4048 /**
4049 offset 1680 bit 10 */
4050 bool unusedBit_634_10 : 1 {};
4051 /**
4052 offset 1680 bit 11 */
4053 bool unusedBit_634_11 : 1 {};
4054 /**
4055 offset 1680 bit 12 */
4056 bool unusedBit_634_12 : 1 {};
4057 /**
4058 offset 1680 bit 13 */
4059 bool unusedBit_634_13 : 1 {};
4060 /**
4061 offset 1680 bit 14 */
4062 bool unusedBit_634_14 : 1 {};
4063 /**
4064 offset 1680 bit 15 */
4065 bool unusedBit_634_15 : 1 {};
4066 /**
4067 offset 1680 bit 16 */
4068 bool unusedBit_634_16 : 1 {};
4069 /**
4070 offset 1680 bit 17 */
4071 bool unusedBit_634_17 : 1 {};
4072 /**
4073 offset 1680 bit 18 */
4074 bool unusedBit_634_18 : 1 {};
4075 /**
4076 offset 1680 bit 19 */
4077 bool unusedBit_634_19 : 1 {};
4078 /**
4079 offset 1680 bit 20 */
4080 bool unusedBit_634_20 : 1 {};
4081 /**
4082 offset 1680 bit 21 */
4083 bool unusedBit_634_21 : 1 {};
4084 /**
4085 offset 1680 bit 22 */
4086 bool unusedBit_634_22 : 1 {};
4087 /**
4088 offset 1680 bit 23 */
4089 bool unusedBit_634_23 : 1 {};
4090 /**
4091 offset 1680 bit 24 */
4092 bool unusedBit_634_24 : 1 {};
4093 /**
4094 offset 1680 bit 25 */
4095 bool unusedBit_634_25 : 1 {};
4096 /**
4097 offset 1680 bit 26 */
4098 bool unusedBit_634_26 : 1 {};
4099 /**
4100 offset 1680 bit 27 */
4101 bool unusedBit_634_27 : 1 {};
4102 /**
4103 offset 1680 bit 28 */
4104 bool unusedBit_634_28 : 1 {};
4105 /**
4106 offset 1680 bit 29 */
4107 bool unusedBit_634_29 : 1 {};
4108 /**
4109 offset 1680 bit 30 */
4110 bool unusedBit_634_30 : 1 {};
4111 /**
4112 offset 1680 bit 31 */
4113 bool unusedBit_634_31 : 1 {};
4114 /**
4115 * Angle of tooth detection within engine phase cycle
4116 * units: angle
4117 * offset 1684
4118 */
4119 uint16_t camDecoder2jzPosition;
4120 /**
4121 * offset 1686
4122 */
4124 /**
4125 * need 4 byte alignment
4126 * units: units
4127 * offset 1687
4128 */
4129 uint8_t alignmentFill_at_1687[1] = {};
4130 /**
4131 * Duration of each test pulse
4132 * units: ms
4133 * offset 1688
4134 */
4135 scaled_channel<uint16_t, 100, 1> benchTestOnTime;
4136 /**
4137 * units: %
4138 * offset 1690
4139 */
4141 /**
4142 * units: %
4143 * offset 1691
4144 */
4145 scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
4146 /**
4147 * offset 1692
4148 */
4150 /**
4151 * need 4 byte alignment
4152 * units: units
4153 * offset 1693
4154 */
4155 uint8_t alignmentFill_at_1693[1] = {};
4156 /**
4157 * offset 1694
4158 */
4160 /**
4161 * offset 1696
4162 */
4164 /**
4165 * offset 1698
4166 */
4168 /**
4169 * offset 1699
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 1700
4176 */
4178 /**
4179 * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
4180 * offset 1701
4181 */
4183 /**
4184 * offset 1702
4185 */
4187 /**
4188 * offset 1704
4189 */
4191 /**
4192 * need 4 byte alignment
4193 * units: units
4194 * offset 1705
4195 */
4196 uint8_t alignmentFill_at_1705[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 1708
4201 */
4202 float boostCutPressure;
4203 /**
4204 * units: kg/h
4205 * offset 1712
4206 */
4207 scaled_channel<uint8_t, 1, 5> tchargeBins[16] = {};
4208 /**
4209 * units: ratio
4210 * offset 1728
4211 */
4212 scaled_channel<uint8_t, 100, 1> tchargeValues[16] = {};
4213 /**
4214 * Fixed timing, useful for TDC testing
4215 * units: deg
4216 * offset 1744
4217 */
4218 float fixedTiming;
4219 /**
4220 * MAP voltage for low point
4221 * units: v
4222 * offset 1748
4223 */
4224 float mapLowValueVoltage;
4225 /**
4226 * MAP voltage for low point
4227 * units: v
4228 * offset 1752
4229 */
4230 float mapHighValueVoltage;
4231 /**
4232 * EGO value correction
4233 * units: value
4234 * offset 1756
4235 */
4236 float egoValueShift;
4237 /**
4238 * VVT output solenoid pin for this cam
4239 * offset 1760
4240 */
4241 output_pin_e vvtPins[CAM_INPUTS_COUNT] = {};
4242 /**
4243 * offset 1768
4244 */
4245 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMinTps;
4246 /**
4247 * offset 1769
4248 */
4249 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMaxTps;
4250 /**
4251 * offset 1770
4252 */
4253 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMinTps;
4254 /**
4255 * offset 1771
4256 */
4257 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMaxTps;
4258 /**
4259 * offset 1772
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 1774
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 1775
4272 */
4273 int8_t maximumIgnitionTiming;
4274 /**
4275 * units: Hz
4276 * offset 1776
4277 */
4279 /**
4280 * offset 1780
4281 */
4282 vvt_mode_e vvtMode[CAMS_PER_BANK] = {};
4283 /**
4284 * Additional idle % when fan #2 is active
4285 * units: %
4286 * offset 1782
4287 */
4288 uint8_t fan2ExtraIdle;
4289 /**
4290 * Delay to allow fuel pressure to build before firing the priming pulse.
4291 * units: sec
4292 * offset 1783
4293 */
4294 scaled_channel<uint8_t, 100, 1> primingDelay;
4295 /**
4296 * offset 1784
4297 */
4298 adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT] = {};
4299 /**
4300 * offset 1792
4301 */
4302 output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT] = {};
4303 /**
4304 * offset 1816
4305 */
4307 /**
4308 * offset 1817
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 1818
4317 */
4319 /**
4320 * need 4 byte alignment
4321 * units: units
4322 * offset 1819
4323 */
4324 uint8_t alignmentFill_at_1819[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 1820
4331 */
4333 /**
4334 * offset 1824
4335 */
4337 /**
4338 * offset 1856
4339 */
4341 /**
4342 * units: Deg
4343 * offset 1888
4344 */
4345 int16_t knockSamplingDuration;
4346 /**
4347 * units: Hz
4348 * offset 1890
4349 */
4350 int16_t etbFreq;
4351 /**
4352 * offset 1892
4353 */
4355 /**
4356 * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
4357 * offset 1912
4358 */
4360 /**
4361 * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
4362 * units: %
4363 * offset 1913
4364 */
4365 uint8_t stepperMinDutyCycle;
4366 /**
4367 * Use to limit the max.current through the stepper motor (100% = no limit)
4368 * units: %
4369 * offset 1914
4370 */
4371 uint8_t stepperMaxDutyCycle;
4372 /**
4373 * offset 1915
4374 */
4376 /**
4377 * per-cylinder ignition and fueling timing correction for uneven engines
4378 * units: deg
4379 * offset 1916
4380 */
4381 angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT] = {};
4382 /**
4383 * units: seconds
4384 * offset 1964
4385 */
4387 /**
4388 * Minimum coolant temperature to activate VVT
4389 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4390 * offset 1968
4391 */
4392 int16_t vvtControlMinClt;
4393 /**
4394 * offset 1970
4395 */
4397 /**
4398 * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
4399 * offset 1971
4400 */
4402 /**
4403 * offset 1972
4404 */
4406 /**
4407 * offset 1973
4408 */
4410 /**
4411 * offset 1974
4412 */
4414 /**
4415 * offset 1975
4416 */
4418 /**
4419 * offset 1976
4420 */
4422 /**
4423 * offset 1977
4424 */
4426 /**
4427 * offset 1978
4428 */
4430 /**
4431 * offset 1979
4432 */
4434 /**
4435 * ResetB
4436 * offset 1980
4437 */
4439 /**
4440 * offset 1982
4441 */
4443 /**
4444 * Brake pedal switch
4445 * offset 1984
4446 */
4448 /**
4449 * need 4 byte alignment
4450 * units: units
4451 * offset 1986
4452 */
4453 uint8_t alignmentFill_at_1986[2] = {};
4454 /**
4455 * VVT output PID
4456 * TODO: rename to vvtPid
4457 * offset 1988
4458 */
4459 pid_s auxPid[CAMS_PER_BANK] = {};
4460 /**
4461 * offset 2028
4462 */
4463 float injectorCorrectionPolynomial[8] = {};
4464 /**
4465 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4466 * offset 2060
4467 */
4468 scaled_channel<int16_t, 1, 1> primeBins[PRIME_CURVE_COUNT] = {};
4469 /**
4470 * offset 2076
4471 */
4473 /**
4474 * offset 2096
4475 */
4477 /**
4478 * need 4 byte alignment
4479 * units: units
4480 * offset 2097
4481 */
4482 uint8_t alignmentFill_at_2097[1] = {};
4483 /**
4484 * offset 2098
4485 */
4487 /**
4488 * offset 2100
4489 */
4491 /**
4492 * offset 2102
4493 */
4495 /**
4496 * need 4 byte alignment
4497 * units: units
4498 * offset 2103
4499 */
4500 uint8_t alignmentFill_at_2103[1] = {};
4501 /**
4502 * offset 2104
4503 */
4505 /**
4506 * need 4 byte alignment
4507 * units: units
4508 * offset 2106
4509 */
4510 uint8_t alignmentFill_at_2106[2] = {};
4511 /**
4512 * units: hz
4513 * offset 2108
4514 */
4515 float auxFrequencyFilter;
4516 /**
4517 * offset 2112
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 2114
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 2116
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 2118
4536 */
4537 int16_t coastingFuelCutTps;
4538 /**
4539 * Fuel cutoff is disabled when the engine is cold.
4540 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
4541 * offset 2120
4542 */
4543 int16_t coastingFuelCutClt;
4544 /**
4545 * Increases PID reaction for RPM<target by adding extra percent to PID-error
4546 * units: %
4547 * offset 2122
4548 */
4549 int16_t pidExtraForLowRpm;
4550 /**
4551 * MAP value above which fuel injection is re-enabled.
4552 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
4553 * offset 2124
4554 */
4555 int16_t coastingFuelCutMap;
4556 /**
4557 * need 4 byte alignment
4558 * units: units
4559 * offset 2126
4560 */
4561 uint8_t alignmentFill_at_2126[2] = {};
4562 /**
4563 * offset 2128
4564 */
4566 /**
4567 * offset 2148
4568 */
4570 /**
4571 * offset 2168
4572 */
4573 gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT] = {};
4574 /**
4575 * offset 2264
4576 */
4577 gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT] = {};
4578 /**
4579 * offset 2328
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 2456
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 2460
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 2464
4601 */
4602 float tChargeAirFlowMax;
4603 /**
4604 * Maximum allowed rate of increase allowed for the estimated charge temperature
4605 * units: deg/sec
4606 * offset 2468
4607 */
4608 float tChargeAirIncrLimit;
4609 /**
4610 * Maximum allowed rate of decrease allowed for the estimated charge temperature
4611 * units: deg/sec
4612 * offset 2472
4613 */
4614 float tChargeAirDecrLimit;
4615 /**
4616 * iTerm min value
4617 * offset 2476
4618 */
4619 int16_t etb_iTermMin;
4620 /**
4621 * iTerm max value
4622 * offset 2478
4623 */
4624 int16_t etb_iTermMax;
4625 /**
4626 * See useIdleTimingPidControl
4627 * offset 2480
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 2500
4633 */
4635 /**
4636 * offset 2504
4637 */
4639 /**
4640 * offset 2505
4641 */
4643 /**
4644 * A delay in cycles between fuel-enrich. portions
4645 * units: cycles
4646 * offset 2506
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 2508
4653 */
4655 /**
4656 * offset 2512
4657 */
4659 /**
4660 * offset 2513
4661 */
4663 /**
4664 * iTerm min value
4665 * offset 2514
4666 */
4667 int16_t idlerpmpid_iTermMin;
4668 /**
4669 * offset 2516
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 2517
4680 */
4681 scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
4682 /**
4683 * iTerm max value
4684 * offset 2518
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 2520
4691 */
4693 /**
4694 * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
4695 * offset 2524
4696 */
4697 uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT] = {};
4698 /**
4699 * units: mg
4700 * offset 2536
4701 */
4702 scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT] = {};
4703 /**
4704 * Trigger comparator center point voltage
4705 * units: V
4706 * offset 2544
4707 */
4708 scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
4709 /**
4710 * Trigger comparator hysteresis voltage (Min)
4711 * units: V
4712 * offset 2545
4713 */
4714 scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
4715 /**
4716 * Trigger comparator hysteresis voltage (Max)
4717 * units: V
4718 * offset 2546
4719 */
4720 scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
4721 /**
4722 * VR-sensor saturation RPM
4723 * units: RPM
4724 * offset 2547
4725 */
4726 scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
4727 /**
4728 * units: ratio
4729 * offset 2548
4730 */
4731 scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
4732 /**
4733 * units: RPM
4734 * offset 2560
4735 */
4736 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE] = {};
4737 /**
4738 * offset 2566
4739 */
4741 /**
4742 * need 4 byte alignment
4743 * units: units
4744 * offset 2567
4745 */
4746 uint8_t alignmentFill_at_2567[1] = {};
4747 /**
4748 * offset 2568
4749 */
4750 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
4751 /**
4752 * Boost Current
4753 * units: mA
4754 * offset 3000
4755 */
4756 uint16_t mc33_i_boost;
4757 /**
4758 * Peak Current
4759 * units: mA
4760 * offset 3002
4761 */
4762 uint16_t mc33_i_peak;
4763 /**
4764 * Hold Current
4765 * units: mA
4766 * offset 3004
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 3006
4773 */
4774 uint16_t mc33_t_max_boost;
4775 /**
4776 * units: us
4777 * offset 3008
4778 */
4779 uint16_t mc33_t_peak_off;
4780 /**
4781 * Peak phase duration
4782 * units: us
4783 * offset 3010
4784 */
4785 uint16_t mc33_t_peak_tot;
4786 /**
4787 * units: us
4788 * offset 3012
4789 */
4790 uint16_t mc33_t_bypass;
4791 /**
4792 * units: us
4793 * offset 3014
4794 */
4795 uint16_t mc33_t_hold_off;
4796 /**
4797 * Hold phase duration
4798 * units: us
4799 * offset 3016
4800 */
4801 uint16_t mc33_t_hold_tot;
4802 /**
4803 * offset 3018
4804 */
4806 /**
4807 * offset 3019
4808 */
4810 /**
4811 * offset 3020
4812 */
4814 /**
4815 * offset 3021
4816 */
4817 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
4818 /**
4819 * need 4 byte alignment
4820 * units: units
4821 * offset 3027
4822 */
4823 uint8_t alignmentFill_at_3027[1] = {};
4824 /**
4825 * units: ratio
4826 * offset 3028
4827 */
4828 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
4829 /**
4830 * units: ratio
4831 * offset 3100
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 3172
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 3173
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 3174
4850 */
4851 scaled_channel<uint8_t, 10, 1> acDelay;
4852 /**
4853 * offset 3175
4854 */
4856 /**
4857 * units: mg
4858 * offset 3176
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 3178
4865 */
4866 uint8_t etbJamDetectThreshold;
4867 /**
4868 * units: lobes/cam
4869 * offset 3179
4870 */
4871 uint8_t hpfpCamLobes;
4872 /**
4873 * offset 3180
4874 */
4876 /**
4877 * Low engine speed for A/C. Larger engines can survive lower values
4878 * units: RPM
4879 * offset 3181
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 3182
4886 */
4887 uint8_t hpfpMinAngle;
4888 /**
4889 * need 4 byte alignment
4890 * units: units
4891 * offset 3183
4892 */
4893 uint8_t alignmentFill_at_3183[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 3184
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 3186
4905 */
4906 uint8_t hpfpActivationAngle;
4907 /**
4908 * offset 3187
4909 */
4910 uint8_t issFilterReciprocal;
4911 /**
4912 * units: %/kPa
4913 * offset 3188
4914 */
4915 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
4916 /**
4917 * units: %/kPa/lobe
4918 * offset 3190
4919 */
4920 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
4921 /**
4922 * iTerm min value
4923 * offset 3192
4924 */
4925 int16_t hpfpPid_iTermMin;
4926 /**
4927 * iTerm max value
4928 * offset 3194
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 3196
4935 */
4936 uint16_t hpfpTargetDecay;
4937 /**
4938 * offset 3198
4939 */
4941 /**
4942 * units: ratio
4943 * offset 3206
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 3226
4950 */
4951 uint16_t vvtActivationDelayMs;
4952 /**
4953 * offset 3228
4954 */
4956 /**
4957 * offset 3229
4958 */
4960 /**
4961 * During revolution where ACR should be disabled at what specific angle to disengage
4962 * units: deg
4963 * offset 3230
4964 */
4965 uint16_t acrDisablePhase;
4966 /**
4967 * offset 3232
4968 */
4970 /**
4971 * offset 3252
4972 */
4974 /**
4975 * offset 3272
4976 */
4978 /**
4979 * offset 3274
4980 */
4982 /**
4983 * need 4 byte alignment
4984 * units: units
4985 * offset 3275
4986 */
4987 uint8_t alignmentFill_at_3275[1] = {};
4988 /**
4989 * offset 3276
4990 */
4992 /**
4993 * offset 3278
4994 */
4996 /**
4997 * need 4 byte alignment
4998 * units: units
4999 * offset 3279
5000 */
5001 uint8_t alignmentFill_at_3279[1] = {};
5002 /**
5003 * offset 3280
5004 */
5006 /**
5007 * offset 3282
5008 */
5010 /**
5011 * offset 3284
5012 */
5014 /**
5015 * need 4 byte alignment
5016 * units: units
5017 * offset 3285
5018 */
5019 uint8_t alignmentFill_at_3285[1] = {};
5020 /**
5021 * offset 3286
5022 */
5024 /**
5025 * offset 3288
5026 */
5028 /**
5029 * offset 3290
5030 */
5032 /**
5033 * need 4 byte alignment
5034 * units: units
5035 * offset 3291
5036 */
5037 uint8_t alignmentFill_at_3291[1] = {};
5038 /**
5039 * offset 3292
5040 */
5042 /**
5043 * offset 3294
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 3296
5050 */
5051 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
5052 /**
5053 * need 4 byte alignment
5054 * units: units
5055 * offset 3297
5056 */
5057 uint8_t alignmentFill_at_3297[1] = {};
5058 /**
5059 * offset 3298
5060 */
5061 uint16_t tuneHidingKey;
5062 /**
5063 * Individual characters are accessible using vin(index) Lua function
5064 * offset 3300
5065 */
5067 /**
5068 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5069 * offset 3317
5070 */
5072 /**
5073 * offset 3318
5074 */
5076 /**
5077 * need 4 byte alignment
5078 * units: units
5079 * offset 3319
5080 */
5081 uint8_t alignmentFill_at_3319[1] = {};
5082 /**
5083 * offset 3320
5084 */
5085 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
5086 /**
5087 * units: rpm
5088 * offset 3336
5089 */
5090 int16_t ALSMinRPM;
5091 /**
5092 * units: rpm
5093 * offset 3338
5094 */
5095 int16_t ALSMaxRPM;
5096 /**
5097 * units: sec
5098 * offset 3340
5099 */
5100 int16_t ALSMaxDuration;
5101 /**
5102 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5103 * offset 3342
5104 */
5105 int8_t ALSMinCLT;
5106 /**
5107 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5108 * offset 3343
5109 */
5110 int8_t ALSMaxCLT;
5111 /**
5112 * offset 3344
5113 */
5114 uint8_t alsMinTimeBetween;
5115 /**
5116 * offset 3345
5117 */
5118 uint8_t alsEtbPosition;
5119 /**
5120 * units: %
5121 * offset 3346
5122 */
5124 /**
5125 * If you have digital SENT TPS sensor please select type. For analog TPS leave None
5126 * offset 3347
5127 */
5129 /**
5130 * offset 3348
5131 */
5132 uint16_t customSentTpsMin;
5133 /**
5134 * need 4 byte alignment
5135 * units: units
5136 * offset 3350
5137 */
5138 uint8_t alignmentFill_at_3350[2] = {};
5139 /**
5140 * units: %
5141 * offset 3352
5142 */
5143 int ALSIdleAdd;
5144 /**
5145 * units: %
5146 * offset 3356
5147 */
5148 int ALSEtbAdd;
5149 /**
5150 * offset 3360
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 3364
5157 */
5158 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
5159 /**
5160 * offset 3365
5161 */
5163 /**
5164 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
5165 * units: %
5166 * offset 3366
5167 */
5168 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
5169 /**
5170 * For Toyota ETCS-i, use ~69%
5171 * units: %
5172 * offset 3367
5173 */
5174 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
5175 /**
5176 * offset 3368
5177 */
5178 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
5179 /**
5180 * offset 3376
5181 */
5182 uint16_t customSentTpsMax;
5183 /**
5184 * offset 3378
5185 */
5186 uint16_t kLineBaudRate;
5187 /**
5188 * offset 3380
5189 */
5191 /**
5192 * offset 3381
5193 */
5194 UiMode uiMode;
5195 /**
5196 * Crank angle ATDC of first lobe peak
5197 * units: deg
5198 * offset 3382
5199 */
5200 int16_t hpfpPeakPos;
5201 /**
5202 * units: us
5203 * offset 3384
5204 */
5205 int16_t kLinePeriodUs;
5206 /**
5207 * Degrees of timing REMOVED from actual timing during soft RPM limit window
5208 * units: deg
5209 * offset 3386
5210 */
5211 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
5212 /**
5213 * % of fuel ADDED during window
5214 * units: %
5215 * offset 3387
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 3388
5223 */
5224 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
5225 /**
5226 * need 4 byte alignment
5227 * units: units
5228 * offset 3389
5229 */
5230 uint8_t alignmentFill_at_3389[1] = {};
5231 /**
5232 * Time between bench test pulses
5233 * units: ms
5234 * offset 3390
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 3392
5242 */
5243 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
5244 /**
5245 * Boost duty cycle modified by gear
5246 * units: %
5247 * offset 3393
5248 */
5249 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
5250 /**
5251 * need 4 byte alignment
5252 * units: units
5253 * offset 3403
5254 */
5255 uint8_t alignmentFill_at_3403[1] = {};
5256 /**
5257 * How many test bench pulses do you want
5258 * offset 3404
5259 */
5260 uint32_t benchTestCount;
5261 /**
5262 * How long initial idle adder is held before starting to decay.
5263 * units: seconds
5264 * offset 3408
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 3409
5271 */
5272 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
5273 /**
5274 * offset 3410
5275 */
5276 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
5277 /**
5278 * offset 3422
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 3428
5285 */
5286 scaled_channel<uint16_t, 10000, 1> canVssScaling;
5287 /**
5288 * need 4 byte alignment
5289 * units: units
5290 * offset 3430
5291 */
5292 uint8_t alignmentFill_at_3430[2] = {};
5293 /**
5294 * offset 3432
5295 */
5297 /**
5298 * offset 3464
5299 */
5301 /**
5302 * offset 3496
5303 */
5305 /**
5306 * offset 3528
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 3560
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 3561
5317 */
5319 /**
5320 * offset 3562
5321 */
5322 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
5323 /**
5324 * offset 3566
5325 */
5327 /**
5328 * Number of speedometer pulses per kilometer travelled.
5329 * offset 3568
5330 */
5331 uint16_t speedometerPulsePerKm;
5332 /**
5333 * offset 3570
5334 */
5335 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
5336 /**
5337 * offset 3574
5338 */
5340 /**
5341 * need 4 byte alignment
5342 * units: units
5343 * offset 3575
5344 */
5345 uint8_t alignmentFill_at_3575[1] = {};
5346 /**
5347 * offset 3576
5348 */
5349 float ignKeyAdcDivider;
5350 /**
5351 * offset 3580
5352 */
5354 /**
5355 * need 4 byte alignment
5356 * units: units
5357 * offset 3581
5358 */
5359 uint8_t alignmentFill_at_3581[3] = {};
5360 /**
5361 * units: ratio
5362 * offset 3584
5363 */
5364 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
5365 /**
5366 * units: ratio
5367 * offset 3600
5368 */
5369 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
5370 /**
5371 * units: %
5372 * offset 3616
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 3652
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 3653
5385 */
5387 /**
5388 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
5389 * units: sec
5390 * offset 3654
5391 */
5392 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
5393 /**
5394 * need 4 byte alignment
5395 * units: units
5396 * offset 3655
5397 */
5398 uint8_t alignmentFill_at_3655[1] = {};
5399 /**
5400 * offset 3656
5401 */
5402 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
5403 /**
5404 * units: Deg
5405 * offset 3680
5406 */
5407 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5408 /**
5409 * units: %
5410 * offset 3716
5411 */
5412 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE] = {};
5413 /**
5414 * offset 3752
5415 */
5416 float auxSpeed1Multiplier;
5417 /**
5418 * offset 3756
5419 */
5421 /**
5422 * offset 3760
5423 */
5425 /**
5426 * offset 3762
5427 */
5429 /**
5430 * offset 3764
5431 */
5433 /**
5434 * offset 3766
5435 */
5437 /**
5438 * offset 3768
5439 */
5441 /**
5442 * offset 3770
5443 */
5445 /**
5446 * offset 3772
5447 */
5449 /**
5450 * offset 3774
5451 */
5453 /**
5454 * offset 3776
5455 */
5457 /**
5458 * offset 3778
5459 */
5461 /**
5462 * offset 3779
5463 */
5465 /**
5466 * offset 3780
5467 */
5469 /**
5470 * offset 3781
5471 */
5473 /**
5474 * offset 3782
5475 */
5477 /**
5478 * offset 3783
5479 */
5481 /**
5482 * offset 3784
5483 */
5485 /**
5486 * offset 3785
5487 */
5489 /**
5490 * need 4 byte alignment
5491 * units: units
5492 * offset 3786
5493 */
5494 uint8_t alignmentFill_at_3786[2] = {};
5495 /**
5496 * Secondary TTL channel baud rate
5497 * units: BPs
5498 * offset 3788
5499 */
5500 uint32_t tunerStudioSerialSpeed;
5501 /**
5502 * offset 3792
5503 */
5505 /**
5506 * offset 3794
5507 */
5509 /**
5510 * need 4 byte alignment
5511 * units: units
5512 * offset 3795
5513 */
5514 uint8_t alignmentFill_at_3795[1] = {};
5515 /**
5516 * offset 3796
5517 */
5518 int anotherCiTest;
5519 /**
5520 * offset 3800
5521 */
5522 uint32_t device_uid[3] = {};
5523 /**
5524 * offset 3812
5525 */
5526 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
5527 /**
5528 * need 4 byte alignment
5529 * units: units
5530 * offset 3818
5531 */
5532 uint8_t alignmentFill_at_3818[2] = {};
5533 /**
5534 * units: Ohm
5535 * offset 3820
5536 */
5538 /**
5539 * offset 3824
5540 */
5542 /**
5543 * Nominal coil charge current, 0.25A step
5544 * units: A
5545 * offset 3828
5546 */
5547 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
5548 /**
5549 * Maximum coil charge current, 1A step
5550 * units: A
5551 * offset 3829
5552 */
5553 uint8_t mc33810Maxi;
5554 /**
5555 * need 4 byte alignment
5556 * units: units
5557 * offset 3830
5558 */
5559 uint8_t alignmentFill_at_3830[2] = {};
5560 /**
5561 * offset 3832
5562 */
5564 /**
5565 * value of A/C pressure in kPa/psi before that compressor is disengaged
5566 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5567 * offset 3852
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 3854
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 3856
5580 */
5581 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
5582 /**
5583 * need 4 byte alignment
5584 * units: units
5585 * offset 3857
5586 */
5587 uint8_t alignmentFill_at_3857[3] = {};
5588 /**
5589 * offset 3860
5590 */
5592 /**
5593 * offset 3880
5594 */
5596 /**
5597 * Below TPS value all knock suppression will be disabled.
5598 * units: %
5599 * offset 3900
5600 */
5601 scaled_channel<uint8_t, 1, 1> knockSuppressMinTps;
5602 /**
5603 * Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
5604 * units: %
5605 * offset 3901
5606 */
5607 scaled_channel<uint8_t, 10, 1> knockFuelTrimAggression;
5608 /**
5609 * After a knock event, reapply fuel at this rate.
5610 * units: 1%/s
5611 * offset 3902
5612 */
5613 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
5614 /**
5615 * Fuel trim when knock, max 30%
5616 * units: %
5617 * offset 3903
5618 */
5619 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
5620 /**
5621 * units: sense
5622 * offset 3904
5623 */
5625 /**
5626 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
5627 * units: Hz
5628 * offset 3908
5629 */
5630 float knockFrequency;
5631 /**
5632 * None = I have a MAP-referenced fuel pressure regulator
5633 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
5634 * Sensed rail pressure = I have a fuel pressure sensor
5635 * offset 3912
5636 */
5638 /**
5639 * need 4 byte alignment
5640 * units: units
5641 * offset 3913
5642 */
5643 uint8_t alignmentFill_at_3913[3] = {};
5644 /**
5645 * This is the pressure at which your injector flow is known.
5646 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
5647 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5648 * offset 3916
5649 */
5651 /**
5652 * SENT input connected to ETB
5653 * offset 3920
5654 */
5656 /**
5657 * SENT input used for high pressure fuel sensor
5658 * offset 3921
5659 */
5661 /**
5662 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
5663 * offset 3922
5664 */
5666 /**
5667 * need 4 byte alignment
5668 * units: units
5669 * offset 3923
5670 */
5671 uint8_t alignmentFill_at_3923[1] = {};
5672 /**
5673 offset 3924 bit 0 */
5674 bool nitrousControlEnabled : 1 {};
5675 /**
5676 offset 3924 bit 1 */
5677 bool vvlControlEnabled : 1 {};
5678 /**
5679 offset 3924 bit 2 */
5680 bool unusedBit_Fancy3 : 1 {};
5681 /**
5682 offset 3924 bit 3 */
5683 bool unusedBit_Fancy4 : 1 {};
5684 /**
5685 offset 3924 bit 4 */
5686 bool unusedBit_Fancy5 : 1 {};
5687 /**
5688 offset 3924 bit 5 */
5689 bool unusedBit_Fancy6 : 1 {};
5690 /**
5691 offset 3924 bit 6 */
5692 bool unusedBit_Fancy7 : 1 {};
5693 /**
5694 offset 3924 bit 7 */
5695 bool unusedBit_Fancy8 : 1 {};
5696 /**
5697 offset 3924 bit 8 */
5698 bool unusedBit_Fancy9 : 1 {};
5699 /**
5700 offset 3924 bit 9 */
5701 bool unusedBit_Fancy10 : 1 {};
5702 /**
5703 offset 3924 bit 10 */
5704 bool unusedBit_Fancy11 : 1 {};
5705 /**
5706 offset 3924 bit 11 */
5707 bool unusedBit_Fancy12 : 1 {};
5708 /**
5709 offset 3924 bit 12 */
5710 bool unusedBit_Fancy13 : 1 {};
5711 /**
5712 offset 3924 bit 13 */
5713 bool unusedBit_Fancy14 : 1 {};
5714 /**
5715 offset 3924 bit 14 */
5716 bool unusedBit_Fancy15 : 1 {};
5717 /**
5718 offset 3924 bit 15 */
5719 bool unusedBit_Fancy16 : 1 {};
5720 /**
5721 offset 3924 bit 16 */
5722 bool unusedBit_Fancy17 : 1 {};
5723 /**
5724 offset 3924 bit 17 */
5725 bool unusedBit_Fancy18 : 1 {};
5726 /**
5727 offset 3924 bit 18 */
5728 bool unusedBit_Fancy19 : 1 {};
5729 /**
5730 offset 3924 bit 19 */
5731 bool unusedBit_Fancy20 : 1 {};
5732 /**
5733 offset 3924 bit 20 */
5734 bool unusedBit_Fancy21 : 1 {};
5735 /**
5736 offset 3924 bit 21 */
5737 bool unusedBit_Fancy22 : 1 {};
5738 /**
5739 offset 3924 bit 22 */
5740 bool unusedBit_Fancy23 : 1 {};
5741 /**
5742 offset 3924 bit 23 */
5743 bool unusedBit_Fancy24 : 1 {};
5744 /**
5745 offset 3924 bit 24 */
5746 bool unusedBit_Fancy25 : 1 {};
5747 /**
5748 offset 3924 bit 25 */
5749 bool unusedBit_Fancy26 : 1 {};
5750 /**
5751 offset 3924 bit 26 */
5752 bool unusedBit_Fancy27 : 1 {};
5753 /**
5754 offset 3924 bit 27 */
5755 bool unusedBit_Fancy28 : 1 {};
5756 /**
5757 offset 3924 bit 28 */
5758 bool unusedBit_Fancy29 : 1 {};
5759 /**
5760 offset 3924 bit 29 */
5761 bool unusedBit_Fancy30 : 1 {};
5762 /**
5763 offset 3924 bit 30 */
5764 bool unusedBit_Fancy31 : 1 {};
5765 /**
5766 offset 3924 bit 31 */
5767 bool unusedBit_Fancy32 : 1 {};
5768 /**
5769 * offset 3928
5770 */
5772 /**
5773 * need 4 byte alignment
5774 * units: units
5775 * offset 3929
5776 */
5777 uint8_t alignmentFill_at_3929[1] = {};
5778 /**
5779 * Pin that activates nitrous control
5780 * offset 3930
5781 */
5783 /**
5784 * offset 3932
5785 */
5787 /**
5788 * offset 3933
5789 */
5791 /**
5792 * offset 3934
5793 */
5795 /**
5796 * need 4 byte alignment
5797 * units: units
5798 * offset 3935
5799 */
5800 uint8_t alignmentFill_at_3935[1] = {};
5801 /**
5802 * offset 3936
5803 */
5805 /**
5806 * offset 3940
5807 */
5809 /**
5810 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
5811 * offset 3944
5812 */
5813 int16_t nitrousMinimumClt;
5814 /**
5815 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
5816 * offset 3946
5817 */
5818 int16_t nitrousMaximumMap;
5819 /**
5820 * units: afr
5821 * offset 3948
5822 */
5823 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
5824 /**
5825 * need 4 byte alignment
5826 * units: units
5827 * offset 3949
5828 */
5829 uint8_t alignmentFill_at_3949[1] = {};
5830 /**
5831 * units: rpm
5832 * offset 3950
5833 */
5834 uint16_t nitrousActivationRpm;
5835 /**
5836 * units: rpm
5837 * offset 3952
5838 */
5839 uint16_t nitrousDeactivationRpm;
5840 /**
5841 * units: rpm
5842 * offset 3954
5843 */
5845 /**
5846 * 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.
5847 * units: deg
5848 * offset 3956
5849 */
5850 uint8_t dfcoRetardDeg;
5851 /**
5852 * Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
5853 * units: s
5854 * offset 3957
5855 */
5856 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
5857 /**
5858 * offset 3958
5859 */
5861 /**
5862 * offset 3960
5863 */
5865 /**
5866 * units: %
5867 * offset 3961
5868 */
5870 /**
5871 * need 4 byte alignment
5872 * units: units
5873 * offset 3962
5874 */
5875 uint8_t alignmentFill_at_3962[2] = {};
5876 /**
5877 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
5878 * units: deg
5879 * offset 3964
5880 */
5882 /**
5883 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
5884 * offset 3968
5885 */
5887 /**
5888 * need 4 byte alignment
5889 * units: units
5890 * offset 3970
5891 */
5892 uint8_t alignmentFill_at_3970[2] = {};
5893 /**
5894 * Exponential Average Alpha filtering parameter
5895 * offset 3972
5896 */
5898 /**
5899 * How often do we update fuel level gauge
5900 * units: seconds
5901 * offset 3976
5902 */
5904 /**
5905 * Error below specified value
5906 * units: v
5907 * offset 3980
5908 */
5910 /**
5911 * Error above specified value
5912 * units: v
5913 * offset 3984
5914 */
5916 /**
5917 * A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.
5918 * '1' means no filtering, 0.98 would be some filtering.
5919 * offset 3988
5920 */
5921 float afrExpAverageAlpha;
5922 /**
5923 * Compensates for trigger delay due to belt stretch, or other electromechanical issues. beware that raising this value advances ignition timing!
5924 * units: uS
5925 * offset 3992
5926 */
5927 scaled_channel<uint8_t, 1, 1> sparkHardwareLatencyCorrection;
5928 /**
5929 * Delay before cutting fuel due to extra high oil pressure. Use this to ignore short pressure blips and sensor noise.
5930 * units: sec
5931 * offset 3993
5932 */
5933 scaled_channel<uint8_t, 10, 1> maxOilPressureTimeout;
5934 /**
5935 * units: kg/h
5936 * offset 3994
5937 */
5938 scaled_channel<uint16_t, 100, 1> idleFlowEstimateFlow[8] = {};
5939 /**
5940 * units: %
5941 * offset 4010
5942 */
5943 scaled_channel<uint8_t, 2, 1> idleFlowEstimatePosition[8] = {};
5944 /**
5945 * units: mg
5946 * offset 4018
5947 */
5948 int8_t airmassToTimingBins[8] = {};
5949 /**
5950 * units: deg
5951 * offset 4026
5952 */
5953 int8_t airmassToTimingValues[8] = {};
5954 /**
5955 * idle return target ramp duration
5956 * units: seconds
5957 * offset 4034
5958 */
5959 scaled_channel<uint8_t, 10, 1> idleReturnTargetRampDuration;
5960 /**
5961 * need 4 byte alignment
5962 * units: units
5963 * offset 4035
5964 */
5965 uint8_t alignmentFill_at_4035[1] = {};
5966 /**
5967 * Voltage when the wastegate is fully open
5968 * units: v
5969 * offset 4036
5970 */
5972 /**
5973 * Voltage when the wastegate is closed
5974 * units: v
5975 * offset 4040
5976 */
5978 /**
5979 * offset 4044
5980 */
5981 wbo_s canWbo[CAN_WBO_COUNT] = {};
5982 /**
5983 * offset 4060
5984 */
5986 /**
5987 * offset 4062
5988 */
5990 /**
5991 * need 4 byte alignment
5992 * units: units
5993 * offset 4063
5994 */
5995 uint8_t alignmentFill_at_4063[1] = {};
5996 /**
5997 * offset 4064
5998 */
6000 /**
6001 * offset 4088
6002 */
6004};
6005static_assert(sizeof(engine_configuration_s) == 4124);
6006
6007// start of ign_cyl_trim_s
6008struct ign_cyl_trim_s {
6009 /**
6010 * offset 0
6011 */
6012 scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE] = {};
6013};
6014static_assert(sizeof(ign_cyl_trim_s) == 16);
6015
6016// start of fuel_cyl_trim_s
6017struct fuel_cyl_trim_s {
6018 /**
6019 * offset 0
6020 */
6021 scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE] = {};
6022};
6023static_assert(sizeof(fuel_cyl_trim_s) == 16);
6024
6025// start of blend_table_s
6026struct blend_table_s {
6027 /**
6028 * offset 0
6029 */
6030 scaled_channel<int16_t, 10, 1> table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT] = {};
6031 /**
6032 * units: Load
6033 * offset 128
6034 */
6035 uint16_t loadBins[BLEND_TABLE_COUNT] = {};
6036 /**
6037 * units: RPM
6038 * offset 144
6039 */
6040 uint16_t rpmBins[BLEND_TABLE_COUNT] = {};
6041 /**
6042 * offset 160
6043 */
6045 /**
6046 * offset 161
6047 */
6049 /**
6050 * offset 162
6051 */
6052 scaled_channel<int16_t, 10, 1> blendBins[BLEND_FACTOR_SIZE] = {};
6053 /**
6054 * units: %
6055 * offset 178
6056 */
6057 scaled_channel<uint8_t, 2, 1> blendValues[BLEND_FACTOR_SIZE] = {};
6058 /**
6059 * need 4 byte alignment
6060 * units: units
6061 * offset 186
6062 */
6063 uint8_t alignmentFill_at_186[2] = {};
6064};
6065static_assert(sizeof(blend_table_s) == 188);
6066
6067// start of persistent_config_s
6068struct persistent_config_s {
6069 /**
6070 * offset 0
6071 */
6073 /**
6074 * offset 4124
6075 */
6076 float tmfTable[TMF_RATIO_SIZE][TMF_SIZE] = {};
6077 /**
6078 * offset 4140
6079 */
6080 float tmfRatioBins[TMF_RATIO_SIZE] = {};
6081 /**
6082 * offset 4148
6083 */
6084 float tmfOpeningBins[TMF_SIZE] = {};
6085 /**
6086 * units: Nm
6087 * offset 4156
6088 */
6089 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE] = {};
6090 /**
6091 * units: RPM
6092 * offset 4192
6093 */
6094 uint16_t torqueRpmBins[TORQUE_CURVE_RPM_SIZE] = {};
6095 /**
6096 * units: Load
6097 * offset 4204
6098 */
6099 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
6100 /**
6101 * units: mult
6102 * offset 4216
6103 */
6104 float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT] = {};
6105 /**
6106 * units: count
6107 * offset 4360
6108 */
6109 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
6110 /**
6111 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6112 * offset 4372
6113 */
6114 int16_t postCrankingCLTBins[CRANKING_ENRICH_CLT_COUNT] = {};
6115 /**
6116 * target TPS value, 0 to 100%
6117 * TODO: use int8 data date once we template interpolation method
6118 * units: target TPS position
6119 * offset 4384
6120 */
6121 float etbBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
6122 /**
6123 * PWM bias, open loop component of PID closed loop control
6124 * units: ETB duty cycle bias
6125 * offset 4416
6126 */
6127 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
6128 /**
6129 * target Wastegate value, 0 to 100%
6130 * units: target DC position
6131 * offset 4448
6132 */
6133 int8_t dcWastegateBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
6134 /**
6135 * PWM bias, open loop component of PID closed loop control
6136 * units: DC wastegate duty cycle bias
6137 * offset 4456
6138 */
6139 scaled_channel<int16_t, 100, 1> dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
6140 /**
6141 * units: %
6142 * offset 4472
6143 */
6144 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
6145 /**
6146 * units: Load
6147 * offset 4536
6148 */
6149 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
6150 /**
6151 * units: RPM
6152 * offset 4544
6153 */
6154 scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE] = {};
6155 /**
6156 * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
6157 * units: RPM
6158 * offset 4552
6159 */
6160 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
6161 /**
6162 * units: ms
6163 * offset 4568
6164 */
6165 scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE] = {};
6166 /**
6167 * CLT-based target RPM for automatic idle controller
6168 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6169 * offset 4584
6170 */
6171 scaled_channel<int16_t, 1, 1> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
6172 /**
6173 * See idleRpmPid
6174 * units: RPM
6175 * offset 4616
6176 */
6177 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
6178 /**
6179 * units: deg
6180 * offset 4632
6181 */
6182 scaled_channel<int16_t, 10, 1> ignitionCltCorrTable[CLT_TIMING_LOAD_AXIS_SIZE][CLT_TIMING_TEMP_AXIS_SIZE] = {};
6183 /**
6184 * CLT-based timing correction
6185 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6186 * offset 4682
6187 */
6188 scaled_channel<int16_t, 1, 1> ignitionCltCorrTempBins[CLT_TIMING_TEMP_AXIS_SIZE] = {};
6189 /**
6190 * units: Load
6191 * offset 4692
6192 */
6193 scaled_channel<uint8_t, 1, 5> ignitionCltCorrLoadBins[CLT_TIMING_LOAD_AXIS_SIZE] = {};
6194 /**
6195 * need 4 byte alignment
6196 * units: units
6197 * offset 4697
6198 */
6199 uint8_t alignmentFill_at_4697[3] = {};
6200 /**
6201 * units: x
6202 * offset 4700
6203 */
6204 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
6205 /**
6206 * units: y
6207 * offset 4764
6208 */
6209 float scriptCurve1[SCRIPT_CURVE_16] = {};
6210 /**
6211 * units: x
6212 * offset 4828
6213 */
6214 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
6215 /**
6216 * units: y
6217 * offset 4892
6218 */
6219 float scriptCurve2[SCRIPT_CURVE_16] = {};
6220 /**
6221 * units: x
6222 * offset 4956
6223 */
6224 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
6225 /**
6226 * units: y
6227 * offset 4988
6228 */
6229 float scriptCurve3[SCRIPT_CURVE_8] = {};
6230 /**
6231 * units: x
6232 * offset 5020
6233 */
6234 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
6235 /**
6236 * units: y
6237 * offset 5052
6238 */
6239 float scriptCurve4[SCRIPT_CURVE_8] = {};
6240 /**
6241 * units: x
6242 * offset 5084
6243 */
6244 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
6245 /**
6246 * units: y
6247 * offset 5116
6248 */
6249 float scriptCurve5[SCRIPT_CURVE_8] = {};
6250 /**
6251 * units: x
6252 * offset 5148
6253 */
6254 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
6255 /**
6256 * units: y
6257 * offset 5180
6258 */
6259 float scriptCurve6[SCRIPT_CURVE_8] = {};
6260 /**
6261 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
6262 * offset 5212
6263 */
6264 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
6265 /**
6266 * units: RPM
6267 * offset 5228
6268 */
6269 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
6270 /**
6271 * units: ratio
6272 * offset 5244
6273 */
6274 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
6275 /**
6276 * Cranking fuel correction coefficient based on TPS
6277 * units: Ratio
6278 * offset 5308
6279 */
6280 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
6281 /**
6282 * units: %
6283 * offset 5340
6284 */
6285 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
6286 /**
6287 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
6288 * units: RPM
6289 * offset 5372
6290 */
6291 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
6292 /**
6293 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
6294 * units: deg
6295 * offset 5380
6296 */
6297 scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE] = {};
6298 /**
6299 * RPM-based idle position for coasting
6300 * units: RPM
6301 * offset 5388
6302 */
6303 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
6304 /**
6305 * RPM-based idle position for coasting
6306 * units: %
6307 * offset 5404
6308 */
6309 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
6310 /**
6311 * offset 5420
6312 */
6313 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
6314 /**
6315 * units: RPM
6316 * offset 5484
6317 */
6318 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
6319 /**
6320 * offset 5492
6321 */
6322 uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT] = {};
6323 /**
6324 * offset 5508
6325 */
6326 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
6327 /**
6328 * offset 5572
6329 */
6330 uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT] = {};
6331 /**
6332 * units: %
6333 * offset 5588
6334 */
6335 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE] = {};
6336 /**
6337 * units: %
6338 * offset 5652
6339 */
6340 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
6341 /**
6342 * units: RPM
6343 * offset 5660
6344 */
6345 scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE] = {};
6346 /**
6347 * 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.
6348 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6349 * offset 5668
6350 */
6351 float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE] = {};
6352 /**
6353 * 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.
6354 * units: percent
6355 * offset 5700
6356 */
6357 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
6358 /**
6359 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6360 * offset 5732
6361 */
6362 float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
6363 /**
6364 * 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.
6365 * Should be 100 once tune is better
6366 * units: cycles
6367 * offset 5756
6368 */
6369 uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
6370 /**
6371 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
6372 * units: RPM
6373 * offset 5768
6374 */
6375 scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE] = {};
6376 /**
6377 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
6378 * units: deg
6379 * offset 5776
6380 */
6381 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
6382 /**
6383 * units: RPM
6384 * offset 5808
6385 */
6386 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE_RPM] = {};
6387 /**
6388 * units: load
6389 * offset 5812
6390 */
6391 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
6392 /**
6393 * units: %
6394 * offset 5816
6395 */
6396 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE_RPM] = {};
6397 /**
6398 * offset 5848
6399 */
6401 /**
6402 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6403 * offset 45848
6404 */
6405 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
6406 /**
6407 * units: ratio
6408 * offset 45912
6409 */
6410 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
6411 /**
6412 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6413 * offset 45976
6414 */
6415 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
6416 /**
6417 * units: ratio
6418 * offset 46040
6419 */
6420 float iatFuelCorr[IAT_CURVE_SIZE] = {};
6421 /**
6422 * units: ratio
6423 * offset 46104
6424 */
6425 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
6426 /**
6427 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6428 * offset 46136
6429 */
6430 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
6431 /**
6432 * units: counter
6433 * offset 46168
6434 */
6435 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
6436 /**
6437 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6438 * offset 46200
6439 */
6440 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
6441 /**
6442 * 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.
6443 * A reasonable starting point is 60mg per liter per cylinder.
6444 * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
6445 * units: mg
6446 * offset 46208
6447 */
6448 float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
6449 /**
6450 * CLT-based idle position for simple manual idle controller
6451 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6452 * offset 46336
6453 */
6454 float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE] = {};
6455 /**
6456 * CLT-based idle position for simple manual idle controller
6457 * units: %
6458 * offset 46360
6459 */
6460 float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE] = {};
6461 /**
6462 * units: Target RPM
6463 * offset 46456
6464 */
6465 scaled_channel<uint8_t, 1, 100> rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE] = {};
6466 /**
6467 * Long Term Idle Trim (LTIT) multiplicativo para idle open loop
6468 * units: %
6469 * offset 46460
6470 */
6471 scaled_channel<uint16_t, 10, 1> ltitTable[CLT_IDLE_TABLE_CLT_SIZE] = {};
6472 /**
6473 * Also known as MAF transfer function.
6474 * kg/hour value.
6475 * By the way 2.081989116 kg/h = 1 ft3/m
6476 * units: kg/hour
6477 * offset 46472
6478 */
6479 float mafDecoding[MAF_DECODING_COUNT] = {};
6480 /**
6481 * units: V
6482 * offset 46600
6483 */
6484 float mafDecodingBins[MAF_DECODING_COUNT] = {};
6485 /**
6486 * units: deg
6487 * offset 46728
6488 */
6489 scaled_channel<int16_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_TEMP_COUNT] = {};
6490 /**
6491 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6492 * offset 46856
6493 */
6494 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_TEMP_COUNT] = {};
6495 /**
6496 * units: Load
6497 * offset 46864
6498 */
6499 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT] = {};
6500 /**
6501 * units: deg
6502 * offset 46872
6503 */
6504 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
6505 /**
6506 * units: Load
6507 * offset 47384
6508 */
6509 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
6510 /**
6511 * units: RPM
6512 * offset 47416
6513 */
6514 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
6515 /**
6516 * units: onoff
6517 * offset 47448
6518 */
6519 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
6520 /**
6521 * 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.
6522 * 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.
6523 * Additionally, you can also use MLV to get the map values and/or generate the table for you
6524 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
6525 * offset 47508
6526 */
6527 scaled_channel<uint16_t, 100, 1> mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT] = {};
6528 /**
6529 * units: % TPS
6530 * offset 48020
6531 */
6532 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[MAP_EST_LOAD_COUNT] = {};
6533 /**
6534 * units: RPM
6535 * offset 48052
6536 */
6537 uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT] = {};
6538 /**
6539 * units: value
6540 * offset 48084
6541 */
6542 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6543 /**
6544 * units: L
6545 * offset 48148
6546 */
6547 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
6548 /**
6549 * units: RPM
6550 * offset 48164
6551 */
6552 uint16_t vvtTable1RpmBins[VVT_TABLE_RPM_SIZE] = {};
6553 /**
6554 * units: value
6555 * offset 48180
6556 */
6557 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE] = {};
6558 /**
6559 * units: L
6560 * offset 48244
6561 */
6562 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
6563 /**
6564 * units: RPM
6565 * offset 48260
6566 */
6567 uint16_t vvtTable2RpmBins[VVT_TABLE_RPM_SIZE] = {};
6568 /**
6569 * units: deg
6570 * offset 48276
6571 */
6572 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
6573 /**
6574 * units: {bitStringValue(ignLoadUnitLabels, ignLoadUnitIdxPcv)}
6575 * offset 48788
6576 */
6577 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
6578 /**
6579 * units: RPM
6580 * offset 48820
6581 */
6582 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
6583 /**
6584 * units: %
6585 * offset 48852
6586 */
6587 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
6588 /**
6589 * units: {bitStringValue(veLoadUnitLabels, veLoadUnitIdxPcv)}
6590 * offset 49364
6591 */
6592 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
6593 /**
6594 * units: RPM
6595 * offset 49396
6596 */
6597 uint16_t veRpmBins[VE_RPM_COUNT] = {};
6598 /**
6599 * units: {useLambdaOnInterface ? "lambda" : "afr"}
6600 * offset 49428
6601 */
6602 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
6603 /**
6604 * offset 49684
6605 */
6606 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
6607 /**
6608 * units: RPM
6609 * offset 49716
6610 */
6611 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
6612 /**
6613 * units: value
6614 * offset 49748
6615 */
6616 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
6617 /**
6618 * units: %
6619 * offset 50004
6620 */
6621 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6622 /**
6623 * units: %
6624 * offset 50036
6625 */
6626 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
6627 /**
6628 * units: value
6629 * offset 50068
6630 */
6631 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
6632 /**
6633 * units: L
6634 * offset 50324
6635 */
6636 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
6637 /**
6638 * units: RPM
6639 * offset 50340
6640 */
6641 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
6642 /**
6643 * units: value
6644 * offset 50356
6645 */
6646 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
6647 /**
6648 * units: L
6649 * offset 50612
6650 */
6651 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
6652 /**
6653 * units: RPM
6654 * offset 50628
6655 */
6656 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
6657 /**
6658 * units: value
6659 * offset 50644
6660 */
6661 uint8_t scriptTable3[TABLE_3_LOAD_SIZE][TABLE_3_RPM_SIZE] = {};
6662 /**
6663 * units: L
6664 * offset 50708
6665 */
6666 int16_t scriptTable3LoadBins[TABLE_3_LOAD_SIZE] = {};
6667 /**
6668 * units: RPM
6669 * offset 50724
6670 */
6671 int16_t scriptTable3RpmBins[TABLE_3_RPM_SIZE] = {};
6672 /**
6673 * units: value
6674 * offset 50740
6675 */
6676 uint8_t scriptTable4[TABLE_4_LOAD_SIZE][TABLE_4_RPM_SIZE] = {};
6677 /**
6678 * units: L
6679 * offset 50820
6680 */
6681 int16_t scriptTable4LoadBins[TABLE_4_LOAD_SIZE] = {};
6682 /**
6683 * units: RPM
6684 * offset 50836
6685 */
6686 int16_t scriptTable4RpmBins[TABLE_4_RPM_SIZE] = {};
6687 /**
6688 * offset 50856
6689 */
6690 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
6691 /**
6692 * units: rpm
6693 * offset 50864
6694 */
6695 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
6696 /**
6697 * offset 50872
6698 */
6699 ign_cyl_trim_s ignTrims[MAX_CYLINDER_COUNT] = {};
6700 /**
6701 * offset 51064
6702 */
6703 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
6704 /**
6705 * units: rpm
6706 * offset 51072
6707 */
6708 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
6709 /**
6710 * offset 51080
6711 */
6712 fuel_cyl_trim_s fuelTrims[MAX_CYLINDER_COUNT] = {};
6713 /**
6714 * units: ratio
6715 * offset 51272
6716 */
6717 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
6718 /**
6719 * units: Airmass
6720 * offset 51288
6721 */
6722 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
6723 /**
6724 * units: %
6725 * offset 51296
6726 */
6727 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
6728 /**
6729 * units: %
6730 * offset 51304
6731 */
6732 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
6733 /**
6734 * units: %
6735 * offset 51312
6736 */
6737 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
6738 /**
6739 * units: %
6740 * offset 51320
6741 */
6742 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
6743 /**
6744 * units: %
6745 * offset 51328
6746 */
6747 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
6748 /**
6749 * units: %
6750 * offset 51336
6751 */
6752 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
6753 /**
6754 * units: %
6755 * offset 51344
6756 */
6757 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
6758 /**
6759 * units: %
6760 * offset 51352
6761 */
6762 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
6763 /**
6764 * units: %
6765 * offset 51360
6766 */
6767 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
6768 /**
6769 * units: %
6770 * offset 51368
6771 */
6772 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
6773 /**
6774 * units: %
6775 * offset 51376
6776 */
6777 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
6778 /**
6779 * units: %
6780 * offset 51384
6781 */
6782 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
6783 /**
6784 * units: TPS
6785 * offset 51392
6786 */
6787 uint8_t tcu_tccTpsBins[8] = {};
6788 /**
6789 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6790 * offset 51400
6791 */
6792 uint8_t tcu_tccLockSpeed[8] = {};
6793 /**
6794 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6795 * offset 51408
6796 */
6797 uint8_t tcu_tccUnlockSpeed[8] = {};
6798 /**
6799 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
6800 * offset 51416
6801 */
6802 uint8_t tcu_32SpeedBins[8] = {};
6803 /**
6804 * units: %
6805 * offset 51424
6806 */
6807 uint8_t tcu_32Vals[8] = {};
6808 /**
6809 * units: %
6810 * offset 51432
6811 */
6812 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_RPM_SIZE] = {};
6813 /**
6814 * units: %
6815 * offset 51468
6816 */
6817 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
6818 /**
6819 * units: RPM
6820 * offset 51474
6821 */
6822 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_RPM_SIZE] = {};
6823 /**
6824 * units: deg
6825 * offset 51480
6826 */
6827 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_RPM_SIZE] = {};
6828 /**
6829 * units: %
6830 * offset 51516
6831 */
6832 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
6833 /**
6834 * units: RPM
6835 * offset 51522
6836 */
6837 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_RPM_SIZE] = {};
6838 /**
6839 * units: deg
6840 * offset 51528
6841 */
6842 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6843 /**
6844 * units: TPS
6845 * offset 51560
6846 */
6847 uint16_t alsIgnRetardLoadBins[ALS_SIZE] = {};
6848 /**
6849 * units: RPM
6850 * offset 51568
6851 */
6852 uint16_t alsIgnRetardrpmBins[ALS_RPM_SIZE] = {};
6853 /**
6854 * units: percent
6855 * offset 51576
6856 */
6857 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[ALS_SIZE][ALS_RPM_SIZE] = {};
6858 /**
6859 * units: TPS
6860 * offset 51608
6861 */
6862 uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE] = {};
6863 /**
6864 * units: RPM
6865 * offset 51616
6866 */
6867 uint16_t alsFuelAdjustmentrpmBins[ALS_RPM_SIZE] = {};
6868 /**
6869 * units: ratio
6870 * offset 51624
6871 */
6872 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[ALS_SIZE][ALS_RPM_SIZE] = {};
6873 /**
6874 * units: TPS
6875 * offset 51656
6876 */
6877 uint16_t alsIgnSkipLoadBins[ALS_SIZE] = {};
6878 /**
6879 * units: RPM
6880 * offset 51664
6881 */
6882 uint16_t alsIgnSkiprpmBins[ALS_RPM_SIZE] = {};
6883 /**
6884 * offset 51672
6885 */
6886 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
6887 /**
6888 * offset 52424
6889 */
6890 blend_table_s veBlends[VE_BLEND_COUNT] = {};
6891 /**
6892 * units: %
6893 * offset 53176
6894 */
6895 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[THR_EST_SIZE] = {};
6896 /**
6897 * In units of g/s normalized to choked flow conditions
6898 * units: g/s
6899 * offset 53200
6900 */
6901 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[THR_EST_SIZE] = {};
6902 /**
6903 * offset 53224
6904 */
6905 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
6906 /**
6907 * offset 53600
6908 */
6909 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
6910 /**
6911 * units: level
6912 * offset 53976
6913 */
6914 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
6915 /**
6916 * units: level
6917 * offset 54000
6918 */
6919 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
6920 /**
6921 * units: level
6922 * offset 54024
6923 */
6924 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
6925 /**
6926 * units: level
6927 * offset 54048
6928 */
6929 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
6930 /**
6931 * units: level
6932 * offset 54072
6933 */
6934 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
6935 /**
6936 * units: level
6937 * offset 54096
6938 */
6939 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
6940 /**
6941 * units: level
6942 * offset 54120
6943 */
6944 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
6945 /**
6946 * units: level
6947 * offset 54144
6948 */
6949 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
6950 /**
6951 * units: level
6952 * offset 54168
6953 */
6954 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
6955 /**
6956 * units: level
6957 * offset 54192
6958 */
6959 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
6960 /**
6961 * units: level
6962 * offset 54216
6963 */
6964 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
6965 /**
6966 * units: lambda
6967 * offset 54240
6968 */
6969 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[LAM_SIZE][LAM_RPM_SIZE] = {};
6970 /**
6971 * offset 54256
6972 */
6973 uint16_t lambdaMaxDeviationLoadBins[LAM_SIZE] = {};
6974 /**
6975 * units: RPM
6976 * offset 54264
6977 */
6978 uint16_t lambdaMaxDeviationRpmBins[LAM_RPM_SIZE] = {};
6979 /**
6980 * units: %
6981 * offset 54272
6982 */
6983 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_RPM_SIZE] = {};
6984 /**
6985 * offset 54308
6986 */
6987 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
6988 /**
6989 * units: RPM
6990 * offset 54320
6991 */
6992 uint16_t injectorStagingRpmBins[INJ_STAGING_RPM_SIZE] = {};
6993 /**
6994 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
6995 * offset 54332
6996 */
6997 int16_t wwCltBins[WWAE_TABLE_SIZE] = {};
6998 /**
6999 * offset 54348
7000 */
7001 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
7002 /**
7003 * offset 54356
7004 */
7005 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
7006 /**
7007 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7008 * offset 54364
7009 */
7010 uint8_t wwMapBins[WWAE_TABLE_SIZE] = {};
7011 /**
7012 * offset 54372
7013 */
7014 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
7015 /**
7016 * offset 54380
7017 */
7018 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
7019 /**
7020 * units: %
7021 * offset 54388
7022 */
7023 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
7024 /**
7025 * units: deg
7026 * offset 54404
7027 */
7028 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
7029 /**
7030 * units: volts
7031 * offset 54420
7032 */
7033 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
7034 /**
7035 * units: ms
7036 * offset 54428
7037 */
7038 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
7039 /**
7040 * units: kPa
7041 * offset 54444
7042 */
7043 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
7044 /**
7045 * units: load
7046 * offset 54644
7047 */
7048 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
7049 /**
7050 * units: RPM
7051 * offset 54664
7052 */
7053 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
7054 /**
7055 * units: %
7056 * offset 54674
7057 */
7058 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_RPM_SIZE] = {};
7059 /**
7060 * units: cc/lobe
7061 * offset 54774
7062 */
7063 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
7064 /**
7065 * units: RPM
7066 * offset 54794
7067 */
7068 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_RPM_SIZE] = {};
7069 /**
7070 * units: %
7071 * offset 54804
7072 */
7073 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7074 /**
7075 * units: fuel mass/mg
7076 * offset 54932
7077 */
7078 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7079 /**
7080 * units: bar
7081 * offset 54948
7082 */
7083 scaled_channel<uint16_t, 10, 1> hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
7084 /**
7085 * units: ms
7086 * offset 54964
7087 */
7088 scaled_channel<uint16_t, 100, 1> injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE] = {};
7089 /**
7090 * units: fuel mass/mg
7091 * offset 55476
7092 */
7093 scaled_channel<uint16_t, 100, 1> injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE] = {};
7094 /**
7095 * units: bar
7096 * offset 55508
7097 */
7098 scaled_channel<uint16_t, 10, 1> injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE] = {};
7099 /**
7100 * units: RPM
7101 * offset 55540
7102 */
7103 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
7104 /**
7105 * Knock sensor output knock detection threshold depending on current RPM.
7106 * units: dB
7107 * offset 55572
7108 */
7109 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
7110 /**
7111 * units: RPM
7112 * offset 55588
7113 */
7114 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7115 /**
7116 * units: multiplier
7117 * offset 55592
7118 */
7119 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7120 /**
7121 * units: RPM
7122 * offset 55596
7123 */
7124 scaled_channel<uint8_t, 1, 50> predictiveMapBlendDurationBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7125 /**
7126 * units: second
7127 * offset 55600
7128 */
7129 scaled_channel<uint8_t, 50, 1> predictiveMapBlendDurationValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
7130 /**
7131 * units: {bitStringValue(unitsLabels, useMetricOnInterface)}
7132 * offset 55604
7133 */
7134 scaled_channel<int16_t, 1, 1> cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
7135 /**
7136 * units: RPM
7137 * offset 55612
7138 */
7139 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
7140 /**
7141 * units: volt
7142 * offset 55620
7143 */
7144 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
7145 /**
7146 * units: %
7147 * offset 55636
7148 */
7149 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
7150 /**
7151 * units: volts
7152 * offset 55644
7153 */
7154 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
7155 /**
7156 * units: multiplier
7157 * offset 55652
7158 */
7159 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
7160 /**
7161 * units: %
7162 * offset 55660
7163 */
7164 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
7165 /**
7166 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7167 * offset 55668
7168 */
7169 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
7170 /**
7171 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7172 * offset 55676
7173 */
7174 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
7175 /**
7176 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7177 * offset 55684
7178 */
7179 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
7180 /**
7181 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7182 * offset 55692
7183 */
7184 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
7185 /**
7186 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7187 * offset 55700
7188 */
7189 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
7190 /**
7191 * units: {bitStringValue(velocityUnitsLabels, useMetricOnInterface)}
7192 * offset 55708
7193 */
7194 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
7195 /**
7196 * units: ms
7197 * offset 55716
7198 */
7199 float tcu_shiftTime;
7200 /**
7201 * units: volts
7202 * offset 55720
7203 */
7204 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
7205 /**
7206 * units: Load
7207 * offset 55752
7208 */
7209 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
7210 /**
7211 * units: RPM
7212 * offset 55760
7213 */
7214 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_RPM_SIZE] = {};
7215 /**
7216 * units: C
7217 * offset 55768
7218 */
7219 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
7220 /**
7221 * units: ratio
7222 * offset 55788
7223 */
7224 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
7225 /**
7226 * units: C
7227 * offset 55808
7228 */
7229 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
7230 /**
7231 * units: ratio
7232 * offset 55828
7233 */
7234 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
7235 /**
7236 * units: C
7237 * offset 55848
7238 */
7239 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
7240 /**
7241 * offset 55868
7242 */
7243 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
7244 /**
7245 * units: C
7246 * offset 55888
7247 */
7248 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
7249 /**
7250 * offset 55908
7251 */
7252 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
7253 /**
7254 * "Minimum Battery Voltage"
7255 * units: #
7256 * offset 55928
7257 */
7258 scaled_channel<uint8_t, 10, 1> cel_battery_min_v;
7259 /**
7260 * "Maximum Battery Voltage"
7261 * units: #
7262 * offset 55929
7263 */
7264 scaled_channel<uint8_t, 10, 1> cel_battery_max_v;
7265 /**
7266 * "Minimum MAP V"
7267 * units: V
7268 * offset 55930
7269 */
7270 scaled_channel<uint8_t, 50, 1> cel_map_min_v;
7271 /**
7272 * "Maximum MAP V"
7273 * units: V
7274 * offset 55931
7275 */
7276 scaled_channel<uint8_t, 50, 1> cel_map_max_v;
7277 /**
7278 * "Minimum IAT V"
7279 * units: V
7280 * offset 55932
7281 */
7282 scaled_channel<uint8_t, 50, 1> cel_iat_min_v;
7283 /**
7284 * "Maximum IAT V"
7285 * units: V
7286 * offset 55933
7287 */
7288 scaled_channel<uint8_t, 50, 1> cel_iat_max_v;
7289 /**
7290 * "Minimum TPS V"
7291 * units: V
7292 * offset 55934
7293 */
7294 scaled_channel<uint8_t, 50, 1> cel_tps_min_v;
7295 /**
7296 * "Maximum TPS V"
7297 * units: V
7298 * offset 55935
7299 */
7300 scaled_channel<uint8_t, 50, 1> cel_tps_max_v;
7301 /**
7302 * units: RPM
7303 * offset 55936
7304 */
7305 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
7306 /**
7307 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7308 * offset 55944
7309 */
7310 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
7311 /**
7312 * offset 55952
7313 */
7314 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
7315 /**
7316 * @@DYNO_RPM_STEP_TOOLTIP@@
7317 * units: Rpm
7318 * offset 56328
7319 */
7320 scaled_channel<uint8_t, 1, 1> dynoRpmStep;
7321 /**
7322 * @@DYNO_SAE_TEMPERATURE_C_TOOLTIP@@
7323 * units: C
7324 * offset 56329
7325 */
7326 scaled_channel<int8_t, 1, 1> dynoSaeTemperatureC;
7327 /**
7328 * @@DYNO_SAE_RELATIVE_HUMIDITY_TOOLTIP@@
7329 * units: %
7330 * offset 56330
7331 */
7332 scaled_channel<uint8_t, 1, 1> dynoSaeRelativeHumidity;
7333 /**
7334 * need 4 byte alignment
7335 * units: units
7336 * offset 56331
7337 */
7338 uint8_t alignmentFill_at_56331[1] = {};
7339 /**
7340 * @@DYNO_SAE_BARO_TOOLTIP@@
7341 * units: KPa
7342 * offset 56332
7343 */
7344 scaled_channel<float, 1, 1> dynoSaeBaro;
7345 /**
7346 * @@DYNO_CAR_WHEEL_DIA_INCH_TOOLTIP@@
7347 * units: Inch
7348 * offset 56336
7349 */
7350 scaled_channel<int8_t, 1, 1> dynoCarWheelDiaInch;
7351 /**
7352 * @@DYNO_CAR_WHEEL_ASPECT_RATIO_TOOLTIP@@
7353 * units: Aspect Ratio (height)
7354 * offset 56337
7355 */
7356 scaled_channel<int8_t, 1, 1> dynoCarWheelAspectRatio;
7357 /**
7358 * @@DYNO_CAR_WHEEL_TIRE_WIDTH_TOOLTIP@@
7359 * units: Width mm
7360 * offset 56338
7361 */
7362 scaled_channel<int16_t, 1, 1> dynoCarWheelTireWidthMm;
7363 /**
7364 * @@DYNO_CAR_GEAR_PRIMARY_REDUCTION_TOOLTIP@@
7365 * units: Units
7366 * offset 56340
7367 */
7368 scaled_channel<float, 1, 1> dynoCarGearPrimaryReduction;
7369 /**
7370 * @@DYNO_CAR_GEAR_RATIO_TOOLTIP@@
7371 * units: Units
7372 * offset 56344
7373 */
7374 scaled_channel<float, 1, 1> dynoCarGearRatio;
7375 /**
7376 * @@DYNO_CAR_GEAR_FINAL_DRIVE_TOOLTIP@@
7377 * units: Units
7378 * offset 56348
7379 */
7380 scaled_channel<float, 1, 1> dynoCarGearFinalDrive;
7381 /**
7382 * @@DYNO_CAR_CAR_MASS_TOOLTIP@@
7383 * units: Kg
7384 * offset 56352
7385 */
7386 scaled_channel<int16_t, 1, 1> dynoCarCarMassKg;
7387 /**
7388 * @@DYNO_CAR_CARGO_MASS_TOOLTIP@@
7389 * units: Kg
7390 * offset 56354
7391 */
7392 scaled_channel<int16_t, 1, 1> dynoCarCargoMassKg;
7393 /**
7394 * @@DYNO_CAR_COEFF_OF_DRAG_TOOLTIP@@
7395 * units: Coeff
7396 * offset 56356
7397 */
7398 scaled_channel<float, 1, 1> dynoCarCoeffOfDrag;
7399 /**
7400 * @@DYNO_CAR_FRONTAL_AREA_TOOLTIP@@
7401 * units: m2
7402 * offset 56360
7403 */
7404 scaled_channel<float, 1, 1> dynoCarFrontalAreaM2;
7405 /**
7406 * units: deg
7407 * offset 56364
7408 */
7409 scaled_channel<int8_t, 10, 1> trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_RPM_SIZE] = {};
7410 /**
7411 * units: rpm
7412 * offset 56380
7413 */
7414 scaled_channel<uint8_t, 1, 50> trailingSparkRpmBins[TRAILING_SPARK_RPM_SIZE] = {};
7415 /**
7416 * units: Load
7417 * offset 56384
7418 */
7419 scaled_channel<uint8_t, 1, 5> trailingSparkLoadBins[TRAILING_SPARK_SIZE] = {};
7420 /**
7421 * units: RPM
7422 * offset 56388
7423 */
7424 scaled_channel<uint8_t, 1, 100> maximumOilPressureBins[4] = {};
7425 /**
7426 * units: {bitStringValue(pressureUnitsLabels, useMetricOnInterface)}
7427 * offset 56392
7428 */
7429 scaled_channel<uint8_t, 1, 10> maximumOilPressureValues[4] = {};
7430 /**
7431 * Selects the X axis to use for the table.
7432 * offset 56396
7433 */
7435 /**
7436 * How many % of ignition events will be cut
7437 * units: %
7438 * offset 56397
7439 */
7440 int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7441 /**
7442 * need 4 byte alignment
7443 * units: units
7444 * offset 56409
7445 */
7446 uint8_t alignmentFill_at_56409[1] = {};
7447 /**
7448 * offset 56410
7449 */
7450 int16_t torqueReductionCutXBins[TORQUE_TABLE_X_SIZE] = {};
7451 /**
7452 * units: gear N°
7453 * offset 56422
7454 */
7455 int8_t torqueReductionCutGearBins[TORQUE_TABLE_Y_SIZE] = {};
7456 /**
7457 * Selects the X axis to use for the table.
7458 * offset 56424
7459 */
7461 /**
7462 * need 4 byte alignment
7463 * units: units
7464 * offset 56425
7465 */
7466 uint8_t alignmentFill_at_56425[3] = {};
7467 /**
7468 * 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
7469 * units: ms
7470 * offset 56428
7471 */
7472 float torqueReductionTimeTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7473 /**
7474 * offset 56476
7475 */
7476 int16_t torqueReductionTimeXBins[TORQUE_TABLE_X_SIZE] = {};
7477 /**
7478 * units: gear N°
7479 * offset 56488
7480 */
7481 int8_t torqueReductionTimeGearBins[TORQUE_TABLE_Y_SIZE] = {};
7482 /**
7483 * Selects the X axis to use for the table.
7484 * offset 56490
7485 */
7487 /**
7488 * need 4 byte alignment
7489 * units: units
7490 * offset 56491
7491 */
7492 uint8_t alignmentFill_at_56491[1] = {};
7493 /**
7494 * How many degrees of timing advance will be reduced during the Torque Reduction Time
7495 * units: deg
7496 * offset 56492
7497 */
7498 float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
7499 /**
7500 * offset 56540
7501 */
7502 int16_t torqueReductionIgnitionRetardXBins[TORQUE_TABLE_X_SIZE] = {};
7503 /**
7504 * units: gear N°
7505 * offset 56552
7506 */
7507 int8_t torqueReductionIgnitionRetardGearBins[TORQUE_TABLE_Y_SIZE] = {};
7508 /**
7509 * need 4 byte alignment
7510 * units: units
7511 * offset 56554
7512 */
7513 uint8_t alignmentFill_at_56554[2] = {};
7514 /**
7515 offset 56556 bit 0 */
7516 bool wizardNumberOfCylinders : 1 {};
7517 /**
7518 offset 56556 bit 1 */
7519 bool wizardFiringOrder : 1 {};
7520 /**
7521 offset 56556 bit 2 */
7522 bool wizardMapSensorType : 1 {};
7523 /**
7524 offset 56556 bit 3 */
7525 bool wizardCrankTrigger : 1 {};
7526 /**
7527 offset 56556 bit 4 */
7528 bool wizardCamTrigger : 1 {};
7529 /**
7530 offset 56556 bit 5 */
7531 bool wizardInjectorFlow : 1 {};
7532 /**
7533 offset 56556 bit 6 */
7534 bool boardUseTempPullUp : 1 {};
7535 /**
7536 offset 56556 bit 7 */
7537 bool boardUse2stepPullDown : 1 {};
7538 /**
7539 offset 56556 bit 8 */
7540 bool boardUseD2PullDown : 1 {};
7541 /**
7542 offset 56556 bit 9 */
7543 bool boardUseD3PullDown : 1 {};
7544 /**
7545 offset 56556 bit 10 */
7546 bool boardUseCrankPullUp : 1 {};
7547 /**
7548 offset 56556 bit 11 */
7549 bool boardUseH1PullDown : 1 {};
7550 /**
7551 offset 56556 bit 12 */
7552 bool boardUseH2PullDown : 1 {};
7553 /**
7554 offset 56556 bit 13 */
7555 bool boardUseH3PullDown : 1 {};
7556 /**
7557 offset 56556 bit 14 */
7558 bool boardUseH4PullDown : 1 {};
7559 /**
7560 offset 56556 bit 15 */
7561 bool boardUseH5PullDown : 1 {};
7562 /**
7563 offset 56556 bit 16 */
7564 bool boardUseFlexPullDown : 1 {};
7565 /**
7566 offset 56556 bit 17 */
7567 bool unusedBit_299_17 : 1 {};
7568 /**
7569 offset 56556 bit 18 */
7570 bool unusedBit_299_18 : 1 {};
7571 /**
7572 offset 56556 bit 19 */
7573 bool unusedBit_299_19 : 1 {};
7574 /**
7575 offset 56556 bit 20 */
7576 bool unusedBit_299_20 : 1 {};
7577 /**
7578 offset 56556 bit 21 */
7579 bool unusedBit_299_21 : 1 {};
7580 /**
7581 offset 56556 bit 22 */
7582 bool unusedBit_299_22 : 1 {};
7583 /**
7584 offset 56556 bit 23 */
7585 bool unusedBit_299_23 : 1 {};
7586 /**
7587 offset 56556 bit 24 */
7588 bool unusedBit_299_24 : 1 {};
7589 /**
7590 offset 56556 bit 25 */
7591 bool unusedBit_299_25 : 1 {};
7592 /**
7593 offset 56556 bit 26 */
7594 bool unusedBit_299_26 : 1 {};
7595 /**
7596 offset 56556 bit 27 */
7597 bool unusedBit_299_27 : 1 {};
7598 /**
7599 offset 56556 bit 28 */
7600 bool unusedBit_299_28 : 1 {};
7601 /**
7602 offset 56556 bit 29 */
7603 bool unusedBit_299_29 : 1 {};
7604 /**
7605 offset 56556 bit 30 */
7606 bool unusedBit_299_30 : 1 {};
7607 /**
7608 offset 56556 bit 31 */
7609 bool unusedBit_299_31 : 1 {};
7610};
7611static_assert(sizeof(persistent_config_s) == 56560);
7612
7613// end
7614// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
torqueReductionTable torqueReductionTimeTable
engine_type_e
debug_mode_e
trigger_type_e
firing_order_e
ve_override_e
idle_mode_e
MsIoBoxVss
launchActivationMode_e
can_wbo_re_hwidx_e
can_wbo_aem_id_e
InjectorNonlinearMode
boostType_e
MsIoBoxId
tle8888_mode_e
cranking_condition_e
lua_gauge_e
mc33810maxDwellTimer_e
RotationalCutMode
ignition_mode_e
vvt_mode_e
stepper_num_micro_steps_e
gppwm_channel_e
air_pressure_sensor_type_e
can_wbo_type_e
dc_function_e
can_wbo_re_id_e
SentInput
ego_sensor_e
load_override_e
injector_pressure_type_e
SentFuelHighPressureType
injector_compensation_mode_e
SentEtbType
uart_device_e
InjectionTimingMode
nitrous_arming_method_e
can_vss_nbc_e
CanGpioType
spi_device_e
pin_input_mode_e
fuel_pressure_sensor_mode_e
hpfp_cam_e
can_baudrate_e
antiLagActivationMode_e
injection_mode_e
timing_mode_e
can_nbc_e
UiMode
imu_type_e
torqueReductionActivationMode_e
TransmissionControllerMode
pin_output_mode_e
tChargeMode_e
GearControllerMode
accel_enrichment_mode_e
lua_gauge_meaning_e
int16_t pwm_freq_t
uint8_t engineSyncCam_e
char[LUA_SCRIPT_SIZE] lua_script_t
char[VIN_NUMBER_SIZE] vin_number_t
float angle_t
char[VEHICLE_INFO_SIZE] vehicle_info_t
int16_t tps_limit_t
char[GPPWM_NOTE_SIZE] gppwm_note_t
scaled_channel< int16_t, 10, 1 > blendBins[BLEND_FACTOR_SIZE]
scaled_channel< uint8_t, 2, 1 > blendValues[BLEND_FACTOR_SIZE]
scaled_channel< int16_t, 10, 1 > table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT]
scaled_channel< uint16_t, 100, 1 > gearRatio[TCU_GEAR_COUNT]
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT]
scaled_channel< int16_t, 1, 1 > primeBins[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT]
int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE][TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT]
scaled_channel< int8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT]
brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT]
scaled_channel< int8_t, 5, 1 > table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE]
scaled_channel< uint8_t, 2, 1 > table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT]
scaled_channel< int16_t, 2, 1 > loadBins[GPPWM_LOAD_COUNT]
scaled_channel< int8_t, 5, 1 > table[IGN_TRIM_SIZE][IGN_TRIM_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrBattBins[VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint32_t, 10, 1 > battLagCorrPressBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint8_t, 10, 1 > maxRemove
scaled_channel< uint8_t, 10, 1 > deadband
scaled_channel< uint16_t, 1, 1 > timeConstant[STFT_CELL_COUNT]
scaled_channel< uint8_t, 10, 1 > maxAdd
scaled_channel< uint16_t, 10, 1 > injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE]
float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int16_t, 1, 1 > cltIdleRpmBins[CLT_CURVE_SIZE]
scaled_channel< int16_t, 100, 1 > dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE]
scaled_channel< uint8_t, 1, 100 > maximumOilPressureBins[4]
uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 10, 1 > dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 20, 1 > iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]
scaled_channel< uint8_t, 100, 1 > wwTauMapValues[WWAE_TABLE_SIZE]
scaled_channel< int16_t, 10, 1 > ALSTimingRetardTable[ALS_SIZE][ALS_RPM_SIZE]
uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_RPM_SIZE]
scaled_channel< int8_t, 2, 1 > knockBaseNoise[ENGINE_NOISE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE]
uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE]
int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT]
scaled_channel< int8_t, 10, 1 > throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_RPM_SIZE]
scaled_channel< uint8_t, 1, 5 > tcu_pcAirmassBins[TCU_TABLE_WIDTH]
scaled_channel< uint8_t, 1, 50 > trailingSparkRpmBins[TRAILING_SPARK_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_RPM_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE]
float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaValues[THR_EST_SIZE]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
scaled_channel< int16_t, 1, 10 > ALSIgnSkipTable[ALS_SIZE][ALS_RPM_SIZE]
scaled_channel< int16_t, 100, 1 > crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE]
float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > ALSFuelAdjustment[ALS_SIZE][ALS_RPM_SIZE]
scaled_channel< uint8_t, 1, 10 > minimumOilPressureValues[8]
scaled_channel< int16_t, 10, 1 > ignitionCltCorrTable[CLT_TIMING_LOAD_AXIS_SIZE][CLT_TIMING_TEMP_AXIS_SIZE]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaBins[THR_EST_SIZE]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE_RPM]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_TEMP_COUNT]
scaled_channel< uint8_t, 1, 5 > trailingSparkLoadBins[TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 100, 1 > lambdaMaxDeviationTable[LAM_SIZE][LAM_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 100, 1 > wwBetaMapValues[WWAE_TABLE_SIZE]
scaled_channel< uint16_t, 10, 1 > veTable[VE_LOAD_COUNT][VE_RPM_COUNT]
int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_RPM_SIZE]
scaled_channel< uint8_t, 100, 1 > wwBetaCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[MAP_EST_LOAD_COUNT]
scaled_channel< uint8_t, 1, 5 > ignitionCltCorrLoadBins[CLT_TIMING_LOAD_AXIS_SIZE]
scaled_channel< int16_t, 1, 1 > ignitionCltCorrTempBins[CLT_TIMING_TEMP_AXIS_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpDeadtimeMS[HPFP_DEADTIME_SIZE]
float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT]
scaled_channel< uint8_t, 50, 1 > predictiveMapBlendDurationValues[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 100, 1 > wwTauCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE]
int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE]
scaled_channel< int16_t, 1, 1 > cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 1 > tcu_shiftTpsBins[TCU_TABLE_WIDTH]
scaled_channel< uint16_t, 10, 1 > ltitTable[CLT_IDLE_TABLE_CLT_SIZE]
scaled_channel< uint8_t, 1, 100 > throttle2TrimRpmBins[ETB2_TRIM_RPM_SIZE]
uint8_t scriptTable4[TABLE_4_LOAD_SIZE][TABLE_4_RPM_SIZE]
scaled_channel< uint8_t, 1, 2 > boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 2, 1 > boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
scaled_channel< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE]
scaled_channel< uint8_t, 1, 100 > rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > crankingFuelCoefE100[CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE]
scaled_channel< uint8_t, 1, 100 > maxKnockRetardRpmBins[KNOCK_TABLE_RPM_SIZE]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE_RPM]
int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_RPM_SIZE]
scaled_channel< int8_t, 10, 1 > trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_RPM_SIZE]
float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT]
scaled_channel< uint8_t, 1, 5 > ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT]
scaled_channel< uint8_t, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE]
uint8_t scriptTable3[TABLE_3_LOAD_SIZE][TABLE_3_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< uint8_t, 1, 50 > predictiveMapBlendDurationBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 1, 10 > maximumOilPressureValues[4]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 147, 1 > lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< uint8_t, 4, 1 > maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE]
uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_RPM_SIZE]
scaled_channel< uint8_t, 10, 1 > maxAfr
scaled_channel< uint8_t, 10, 1 > minAfr
scaled_channel< uint8_t, 10, 1 > deadband
scaled_channel< uint8_t, 1, 50 > maxIdleRegionRpm
stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT]
scaled_channel< uint8_t, 10, 1 > maximumAfr