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