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