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