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