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