rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_hellen-gm-e67.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 int8_t maxAdd;
14 /**
15 * Maximum % that the short term fuel trim can remove
16 * units: %
17 * offset 1
18 */
19 int8_t maxRemove;
20 /**
21 * 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.
22 * units: sec
23 * offset 2
24 */
25 scaled_channel<uint16_t, 10, 1> timeConstant;
26};
27static_assert(sizeof(stft_cell_cfg_s) == 4);
28
29// start of stft_s
30struct stft_s {
31 /**
32 * Below this RPM, the idle region is active, idle+300 would be a good value
33 * units: RPM
34 * offset 0
35 */
36 scaled_channel<uint8_t, 1, 50> maxIdleRegionRpm;
37 /**
38 * need 4 byte alignment
39 * units: units
40 * offset 1
41 */
42 uint8_t alignmentFill_at_1[1] = {};
43 /**
44 * Below this engine load, the overrun region is active
45 * units: load
46 * offset 2
47 */
48 uint16_t maxOverrunLoad;
49 /**
50 * Above this engine load, the power region is active
51 * units: load
52 * offset 4
53 */
54 uint16_t minPowerLoad;
55 /**
56 * 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.
57 * units: %
58 * offset 6
59 */
60 scaled_channel<uint8_t, 10, 1> deadband;
61 /**
62 * Below this temperature, correction is disabled.
63 * units: C
64 * offset 7
65 */
66 int8_t minClt;
67 /**
68 * Below this AFR, correction is paused
69 * units: afr
70 * offset 8
71 */
72 scaled_channel<uint8_t, 10, 1> minAfr;
73 /**
74 * Above this AFR, correction is paused
75 * units: afr
76 * offset 9
77 */
78 scaled_channel<uint8_t, 10, 1> maxAfr;
79 /**
80 * Delay after starting the engine before beginning closed loop correction.
81 * units: seconds
82 * offset 10
83 */
84 uint8_t startupDelay;
85 /**
86 * need 4 byte alignment
87 * units: units
88 * offset 11
89 */
90 uint8_t alignmentFill_at_11[1] = {};
91 /**
92 * offset 12
93 */
94 stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT] = {};
95};
96static_assert(sizeof(stft_s) == 28);
97
98// start of pid_s
99struct pid_s {
100 /**
101 * offset 0
102 */
103 float pFactor;
104 /**
105 * offset 4
106 */
107 float iFactor;
108 /**
109 * offset 8
110 */
111 float dFactor;
112 /**
113 * Linear addition to PID logic
114 * offset 12
115 */
116 int16_t offset;
117 /**
118 * PID dTime
119 * units: ms
120 * offset 14
121 */
122 int16_t periodMs;
123 /**
124 * Output Min Duty Cycle
125 * offset 16
126 */
127 int16_t minValue;
128 /**
129 * Output Max Duty Cycle
130 * offset 18
131 */
132 int16_t maxValue;
133};
134static_assert(sizeof(pid_s) == 20);
135
136// start of MsIoBox_config_s
137struct MsIoBox_config_s {
138 /**
139 * offset 0
140 */
142 /**
143 * offset 1
144 */
146 /**
147 * need 4 byte alignment
148 * units: units
149 * offset 2
150 */
151 uint8_t alignmentFill_at_2[2] = {};
152};
153static_assert(sizeof(MsIoBox_config_s) == 4);
154
155// start of cranking_parameters_s
157 /**
158 * Base mass of the per-cylinder fuel injected during cranking. This is then modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width.
159 * A reasonable starting point is 60mg per liter per cylinder.
160 * ex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel.
161 * units: mg
162 * offset 0
163 */
164 float baseFuel;
165 /**
166 * This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm.
167 * set cranking_rpm X
168 * units: RPM
169 * offset 4
170 */
171 int16_t rpm;
172 /**
173 * need 4 byte alignment
174 * units: units
175 * offset 6
176 */
177 uint8_t alignmentFill_at_6[2] = {};
178};
179static_assert(sizeof(cranking_parameters_s) == 8);
180
181// start of gppwm_channel
182struct gppwm_channel {
183 /**
184 * Select a pin to use for PWM or on-off output.
185 * offset 0
186 */
188 /**
189 * If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.
190 * This should be a safe value for whatever hardware is connected to prevent damage.
191 * units: %
192 * offset 2
193 */
194 uint8_t dutyIfError;
195 /**
196 * need 4 byte alignment
197 * units: units
198 * offset 3
199 */
200 uint8_t alignmentFill_at_3[1] = {};
201 /**
202 * Select a frequency to run PWM at.
203 * Set this to 0hz to enable on-off mode.
204 * units: hz
205 * offset 4
206 */
207 uint16_t pwmFrequency;
208 /**
209 * Hysteresis: in on-off mode, turn the output on when the table value is above this duty.
210 * units: %
211 * offset 6
212 */
213 uint8_t onAboveDuty;
214 /**
215 * Hysteresis: in on-off mode, turn the output off when the table value is below this duty.
216 * units: %
217 * offset 7
218 */
219 uint8_t offBelowDuty;
220 /**
221 * Selects the Y axis to use for the table.
222 * offset 8
223 */
225 /**
226 * Selects the X axis to use for the table.
227 * offset 9
228 */
230 /**
231 * offset 10
232 */
233 scaled_channel<int16_t, 2, 1> loadBins[GPPWM_LOAD_COUNT] = {};
234 /**
235 * offset 26
236 */
237 int16_t rpmBins[GPPWM_RPM_COUNT] = {};
238 /**
239 * units: duty
240 * offset 42
241 */
242 scaled_channel<uint8_t, 2, 1> table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT] = {};
243 /**
244 * need 4 byte alignment
245 * units: units
246 * offset 106
247 */
248 uint8_t alignmentFill_at_106[2] = {};
249};
250static_assert(sizeof(gppwm_channel) == 108);
251
252// start of air_pressure_sensor_config_s
254 /**
255 * kPa value at low volts
256 * units: kpa
257 * offset 0
258 */
259 float lowValue;
260 /**
261 * kPa value at high volts
262 * units: kpa
263 * offset 4
264 */
265 float highValue;
266 /**
267 * offset 8
268 */
270 /**
271 * offset 9
272 */
274 /**
275 * need 4 byte alignment
276 * units: units
277 * offset 10
278 */
279 uint8_t alignmentFill_at_10[2] = {};
280};
281static_assert(sizeof(air_pressure_sensor_config_s) == 12);
282
283// start of MAP_sensor_config_s
284struct MAP_sensor_config_s {
285 /**
286 * offset 0
287 */
288 float samplingAngleBins[MAP_ANGLE_SIZE] = {};
289 /**
290 * MAP averaging sampling start crank degree angle
291 * units: deg
292 * offset 32
293 */
294 float samplingAngle[MAP_ANGLE_SIZE] = {};
295 /**
296 * offset 64
297 */
298 float samplingWindowBins[MAP_WINDOW_SIZE] = {};
299 /**
300 * MAP averaging angle crank degree duration
301 * units: deg
302 * offset 96
303 */
304 float samplingWindow[MAP_WINDOW_SIZE] = {};
305 /**
306 * offset 128
307 */
309};
310static_assert(sizeof(MAP_sensor_config_s) == 140);
311
312/**
313 * @brief Thermistor known values
314
315*/
316// start of thermistor_conf_s
317struct thermistor_conf_s {
318 /**
319 * these values are in Celcius
320 * units: *C
321 * offset 0
322 */
323 float tempC_1;
324 /**
325 * units: *C
326 * offset 4
327 */
328 float tempC_2;
329 /**
330 * units: *C
331 * offset 8
332 */
333 float tempC_3;
334 /**
335 * units: Ohm
336 * offset 12
337 */
338 float resistance_1;
339 /**
340 * units: Ohm
341 * offset 16
342 */
343 float resistance_2;
344 /**
345 * units: Ohm
346 * offset 20
347 */
348 float resistance_3;
349 /**
350 * Pull-up resistor value on your board
351 * units: Ohm
352 * offset 24
353 */
354 float bias_resistor;
355};
356static_assert(sizeof(thermistor_conf_s) == 28);
357
358// start of linear_sensor_s
359struct linear_sensor_s {
360 /**
361 * offset 0
362 */
364 /**
365 * need 4 byte alignment
366 * units: units
367 * offset 1
368 */
369 uint8_t alignmentFill_at_1[3] = {};
370 /**
371 * units: volts
372 * offset 4
373 */
374 float v1;
375 /**
376 * offset 8
377 */
378 float value1;
379 /**
380 * units: volts
381 * offset 12
382 */
383 float v2;
384 /**
385 * offset 16
386 */
387 float value2;
388};
389static_assert(sizeof(linear_sensor_s) == 20);
390
391// start of ThermistorConf
392struct ThermistorConf {
393 /**
394 * offset 0
395 */
397 /**
398 * offset 28
399 */
401 /**
402 * need 4 byte alignment
403 * units: units
404 * offset 29
405 */
406 uint8_t alignmentFill_at_29[3] = {};
407};
408static_assert(sizeof(ThermistorConf) == 32);
409
410// start of injector_s
411struct injector_s {
412 /**
413 * This is your injector flow at the fuel pressure used in the vehicle
414 * See units setting below
415 * offset 0
416 */
417 float flow;
418 /**
419 * units: volts
420 * offset 4
421 */
422 float battLagCorrBins[VBAT_INJECTOR_CURVE_SIZE] = {};
423 /**
424 * ms delay between injector open and close dead times
425 * units: ms
426 * offset 36
427 */
428 float battLagCorr[VBAT_INJECTOR_CURVE_SIZE] = {};
429};
430static_assert(sizeof(injector_s) == 68);
431
432// start of trigger_config_s
433struct trigger_config_s {
434 /**
435 * https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers
436 * offset 0
437 */
439 /**
440 * units: number
441 * offset 4
442 */
444 /**
445 * units: number
446 * offset 8
447 */
449};
450static_assert(sizeof(trigger_config_s) == 12);
451
452// start of afr_sensor_s
453struct afr_sensor_s {
454 /**
455 * offset 0
456 */
458 /**
459 * offset 1
460 */
462 /**
463 * need 4 byte alignment
464 * units: units
465 * offset 2
466 */
467 uint8_t alignmentFill_at_2[2] = {};
468 /**
469 * units: volts
470 * offset 4
471 */
472 float v1;
473 /**
474 * units: AFR
475 * offset 8
476 */
477 float value1;
478 /**
479 * units: volts
480 * offset 12
481 */
482 float v2;
483 /**
484 * units: AFR
485 * offset 16
486 */
487 float value2;
488};
489static_assert(sizeof(afr_sensor_s) == 20);
490
491// start of idle_hardware_s
492struct idle_hardware_s {
493 /**
494 * units: Hz
495 * offset 0
496 */
498 /**
499 * offset 4
500 */
502 /**
503 * offset 6
504 */
506 /**
507 * offset 8
508 */
510 /**
511 * offset 10
512 */
514 /**
515 * need 4 byte alignment
516 * units: units
517 * offset 11
518 */
519 uint8_t alignmentFill_at_11[1] = {};
520};
521static_assert(sizeof(idle_hardware_s) == 12);
522
523// start of dc_io
524struct dc_io {
525 /**
526 * offset 0
527 */
529 /**
530 * offset 2
531 */
533 /**
534 * Acts as EN pin in two-wire mode
535 * offset 4
536 */
538 /**
539 * offset 6
540 */
542};
543static_assert(sizeof(dc_io) == 8);
544
545// start of vr_threshold_s
546struct vr_threshold_s {
547 /**
548 * units: rpm
549 * offset 0
550 */
551 scaled_channel<uint8_t, 1, 50> rpmBins[6] = {};
552 /**
553 * units: volts
554 * offset 6
555 */
556 scaled_channel<uint8_t, 100, 1> values[6] = {};
557 /**
558 * offset 12
559 */
560 Gpio pin;
561 /**
562 * need 4 byte alignment
563 * units: units
564 * offset 14
565 */
566 uint8_t alignmentFill_at_14[2] = {};
567};
568static_assert(sizeof(vr_threshold_s) == 16);
569
570// start of engine_configuration_s
572 /**
573 * http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
574 * set engine_type X
575 * offset 0
576 */
578 /**
579 * offset 2
580 */
582 /**
583 * Disable sensor sniffer above this rpm
584 * units: RPM
585 * offset 4
586 */
588 /**
589 * A secondary Rev limit engaged by the driver to help launch the vehicle faster
590 * units: rpm
591 * offset 6
592 */
593 uint16_t launchRpm;
594 /**
595 * set rpm_hard_limit X
596 * units: rpm
597 * offset 8
598 */
599 uint16_t rpmHardLimit;
600 /**
601 * Engine sniffer would be disabled above this rpm
602 * set engineSnifferRpmThreshold X
603 * units: RPM
604 * offset 10
605 */
607 /**
608 * Disable multispark above this engine speed.
609 * units: rpm
610 * offset 12
611 */
612 scaled_channel<uint8_t, 1, 50> multisparkMaxRpm;
613 /**
614 * Above this RPM, disable AC. Set to 0 to disable check.
615 * units: rpm
616 * offset 13
617 */
618 scaled_channel<uint8_t, 1, 50> maxAcRpm;
619 /**
620 * Above this TPS, disable AC. Set to 0 to disable check.
621 * units: %
622 * offset 14
623 */
624 uint8_t maxAcTps;
625 /**
626 * Above this CLT, disable AC to prevent overheating the engine. Set to 0 to disable check.
627 * units: deg C
628 * offset 15
629 */
630 uint8_t maxAcClt;
631 /**
632 * Just for reference really, not taken into account by any logic at this point
633 * units: CR
634 * offset 16
635 */
636 float compressionRatio;
637 /**
638 * Voltage when the wastegate is closed.
639 * You probably don't have one of these!
640 * units: mv
641 * offset 20
642 */
643 uint16_t wastegatePositionMin;
644 /**
645 * Voltage when the wastegate is fully open.
646 * You probably don't have one of these!
647 * 1 volt = 1000 units
648 * units: mv
649 * offset 22
650 */
651 uint16_t wastegatePositionMax;
652 /**
653 * Voltage when the idle valve is closed.
654 * You probably don't have one of these!
655 * units: mv
656 * offset 24
657 */
658 uint16_t idlePositionMin;
659 /**
660 * Voltage when the idle valve is open.
661 * You probably don't have one of these!
662 * 1 volt = 1000 units
663 * units: mv
664 * offset 26
665 */
666 uint16_t idlePositionMax;
667 /**
668 * offset 28
669 */
671 /**
672 * offset 30
673 */
675 /**
676 * offset 32
677 */
679 /**
680 * offset 34
681 */
683 /**
684 * Pin that activates the reduction/cut for shifting. Sometimes shared with the Launch Control pin
685 * offset 36
686 */
688 /**
689 * units: %
690 * offset 38
691 */
693 /**
694 * Time after which the throttle is considered jammed.
695 * units: sec
696 * offset 39
697 */
698 scaled_channel<uint8_t, 50, 1> etbJamTimeout;
699 /**
700 * offset 40
701 */
703 /**
704 * offset 42
705 */
707 /**
708 * Additional idle % while A/C is active
709 * units: %
710 * offset 43
711 */
712 uint8_t acIdleExtraOffset;
713 /**
714 * Value between 0 and 100 used in Manual mode
715 * units: %
716 * offset 44
717 */
718 float manIdlePosition;
719 /**
720 * 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.
721 * units: deg
722 * offset 48
723 */
725 /**
726 * Configures the maximum number of extra sparks to fire (does not include main spark)
727 * units: count
728 * offset 49
729 */
731 /**
732 * units: RPM
733 * offset 50
734 */
735 int16_t vvtControlMinRpm;
736 /**
737 * offset 52
738 */
740 /**
741 * offset 120
742 */
744 /**
745 * Does the vehicle have a turbo or supercharger?
746 offset 188 bit 0 */
747 bool isForcedInduction : 1 {};
748 /**
749 * 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.
750 offset 188 bit 1 */
751 bool useFordRedundantTps : 1 {};
752 /**
753 offset 188 bit 2 */
754 bool enableKline : 1 {};
755 /**
756 offset 188 bit 3 */
757 bool overrideTriggerGaps : 1 {};
758 /**
759 * Turn on this fan when AC is on.
760 offset 188 bit 4 */
761 bool enableFan1WithAc : 1 {};
762 /**
763 * Turn on this fan when AC is on.
764 offset 188 bit 5 */
765 bool enableFan2WithAc : 1 {};
766 /**
767 * Inhibit operation of this fan while the engine is not running.
768 offset 188 bit 6 */
769 bool disableFan1WhenStopped : 1 {};
770 /**
771 * Inhibit operation of this fan while the engine is not running.
772 offset 188 bit 7 */
773 bool disableFan2WhenStopped : 1 {};
774 /**
775 * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
776 offset 188 bit 8 */
777 bool enableTrailingSparks : 1 {};
778 /**
779 * TLE7209 and L6205 use two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode.
780 offset 188 bit 9 */
781 bool etb_use_two_wires : 1 {};
782 /**
783 * 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.
784 offset 188 bit 10 */
785 bool isDoubleSolenoidIdle : 1 {};
786 /**
787 offset 188 bit 11 */
788 bool useEeprom : 1 {};
789 /**
790 * Switch between Industrial and Cic PID implementation
791 offset 188 bit 12 */
792 bool useCicPidForIdle : 1 {};
793 /**
794 offset 188 bit 13 */
795 bool useTLE8888_cranking_hack : 1 {};
796 /**
797 offset 188 bit 14 */
798 bool kickStartCranking : 1 {};
799 /**
800 * This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).
801 offset 188 bit 15 */
803 /**
804 offset 188 bit 16 */
805 bool launchControlEnabled : 1 {};
806 /**
807 * "Detect double trigger edges"
808 offset 188 bit 17 */
809 bool doNotFilterTriggerEdgeNoise : 1 {};
810 /**
811 offset 188 bit 18 */
812 bool antiLagEnabled : 1 {};
813 /**
814 * For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table).
815 offset 188 bit 19 */
816 bool useRunningMathForCranking : 1 {};
817 /**
818 * Shall we display real life signal or just the part consumed by trigger decoder.
819 * Applies to both trigger and cam/vvt input.
820 *
821 * enable logic_level_trigger
822 offset 188 bit 20 */
824 /**
825 offset 188 bit 21 */
826 bool useTLE8888_stepper : 1 {};
827 /**
828 offset 188 bit 22 */
830 /**
831 * Print incoming and outgoing first bus CAN messages in rusEFI console
832 offset 188 bit 23 */
833 bool verboseCan : 1 {};
834 /**
835 * Experimental setting that will cause a misfire
836 * DO NOT ENABLE.
837 offset 188 bit 24 */
838 bool artificialTestMisfire : 1 {};
839 /**
840 * 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.
841 offset 188 bit 25 */
842 bool useFordRedundantPps : 1 {};
843 /**
844 offset 188 bit 26 */
845 bool cltSensorPulldown : 1 {};
846 /**
847 offset 188 bit 27 */
848 bool iatSensorPulldown : 1 {};
849 /**
850 offset 188 bit 28 */
851 bool allowIdenticalPps : 1 {};
852 /**
853 offset 188 bit 29 */
854 bool overrideVvtTriggerGaps : 1 {};
855 /**
856 * If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages
857 offset 188 bit 30 */
858 bool useSpiImu : 1 {};
859 /**
860 offset 188 bit 31 */
861 bool enableStagedInjection : 1 {};
862 /**
863 * Closed throttle, 1 volt = 200 units.
864 * See also tps1_1AdcChannel
865 * set tps_min X
866 * units: ADC
867 * offset 192
868 */
869 int16_t tpsMin;
870 /**
871 * Full throttle.
872 * See also tps1_1AdcChannel
873 * set tps_max X
874 * units: ADC
875 * offset 194
876 */
877 int16_t tpsMax;
878 /**
879 * TPS error detection: what throttle % is unrealistically low?
880 * Also used for accelerator pedal error detection if so equipped.
881 * units: %
882 * offset 196
883 */
885 /**
886 * TPS error detection: what throttle % is unrealistically high?
887 * Also used for accelerator pedal error detection if so equipped.
888 * units: %
889 * offset 198
890 */
892 /**
893 * offset 200
894 */
896 /**
897 * Dwell duration while cranking
898 * units: ms
899 * offset 208
900 */
902 /**
903 * Once engine speed passes this value, start reducing ETB angle.
904 * units: rpm
905 * offset 212
906 */
907 uint16_t etbRevLimitStart;
908 /**
909 * 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.
910 * units: rpm
911 * offset 214
912 */
913 uint16_t etbRevLimitRange;
914 /**
915 * @see isMapAveragingEnabled
916 * offset 216
917 */
919 /**
920 * todo: merge with channel settings, use full-scale Thermistor here!
921 * offset 356
922 */
924 /**
925 * offset 388
926 */
928 /**
929 * units: deg
930 * offset 420
931 */
932 float launchTimingRetard;
933 /**
934 * value '6' for 8MHz hw osc
935 * read hip9011 datasheet for details
936 * todo split into two bit fields
937 * units: integer
938 * offset 424
939 */
941 /**
942 * iTerm min value
943 * offset 428
944 */
945 int16_t alternator_iTermMin;
946 /**
947 * iTerm max value
948 * offset 430
949 */
950 int16_t alternator_iTermMax;
951 /**
952 * @@DISPLACEMENT_TOOLTIP@@
953 * units: L
954 * offset 432
955 */
956 scaled_channel<uint16_t, 1000, 1> displacement;
957 /**
958 * units: RPM
959 * offset 434
960 */
961 uint16_t triggerSimulatorRpm;
962 /**
963 * Number of cylinder the engine has.
964 * offset 436
965 */
966 uint32_t cylindersCount;
967 /**
968 * offset 440
969 */
971 /**
972 * offset 441
973 */
974 uint8_t justATempTest;
975 /**
976 * Delta kPa for MAP sync
977 * units: kPa
978 * offset 442
979 */
980 uint8_t mapSyncThreshold;
981 /**
982 * How many % of ignition events will be cut
983 * units: %
984 * offset 443
985 */
987 /**
988 * @@CYLINDER_BORE_TOOLTIP@@
989 * units: mm
990 * offset 444
991 */
992 float cylinderBore;
993 /**
994 * This setting controls which fuel quantity control algorithm is used.
995 * Alpha-N means drive by TPS commonly only used for NA engines
996 * Speed Density requires MAP sensor and is the default choice for may installs
997 * MAF air charge is a cylinder filling based method that uses a mass air flow sensor.
998 * offset 448
999 */
1001 /**
1002 * units: %
1003 * offset 449
1004 */
1005 uint8_t ALSMaxTPS;
1006 /**
1007 * This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous".
1008 * offset 450
1009 */
1011 /**
1012 * 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.
1013 * offset 451
1014 */
1016 /**
1017 * Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1018 * offset 452
1019 */
1020 uint16_t boostControlMinRpm;
1021 /**
1022 * Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1023 * offset 454
1024 */
1025 uint8_t boostControlMinTps;
1026 /**
1027 * need 4 byte alignment
1028 * units: units
1029 * offset 455
1030 */
1031 uint8_t alignmentFill_at_455[1] = {};
1032 /**
1033 * Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases.
1034 * offset 456
1035 */
1036 uint16_t boostControlMinMap;
1037 /**
1038 * need 4 byte alignment
1039 * units: units
1040 * offset 458
1041 */
1042 uint8_t alignmentFill_at_458[2] = {};
1043 /**
1044 * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.
1045 * There is tapering towards running timing advance
1046 * set cranking_timing_angle X
1047 * units: deg
1048 * offset 460
1049 */
1051 /**
1052 * Single coil = distributor
1053 * Individual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode
1054 * Wasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder
1055 * Two distributors = A pair of distributors, found on some BMW, Toyota and other engines
1056 * set ignition_mode X
1057 * offset 464
1058 */
1060 /**
1061 * How many consecutive gap rations have to match expected ranges for sync to happen
1062 * units: count
1063 * offset 465
1064 */
1066 /**
1067 * Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).
1068 * units: kph
1069 * offset 466
1070 */
1071 uint8_t maxIdleVss;
1072 /**
1073 * offset 467
1074 */
1075 uint8_t camDecoder2jzPrecision;
1076 /**
1077 * 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.
1078 * units: kPa
1079 * offset 468
1080 */
1081 uint16_t minOilPressureAfterStart;
1082 /**
1083 * Dynamic uses the timing map to decide the ignition timing
1084 * Static timing fixes the timing to the value set below (only use for checking static timing with a timing light).
1085 * offset 470
1086 */
1088 /**
1089 * offset 471
1090 */
1092 /**
1093 * This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing
1094 * This mode is useful when adjusting distributor location.
1095 * units: RPM
1096 * offset 472
1097 */
1099 /**
1100 * Angle between Top Dead Center (TDC) and the first trigger event.
1101 * Positive value in case of synchronization point before TDC and negative in case of synchronization point after TDC
1102 * .Knowing this angle allows us to control timing and other angles in reference to TDC.
1103 * HOWTO:
1104 * 1: Switch to fixed timing mode on 'ignition setting' dialog
1105 * 2: use an actual timing light to calibrate
1106 * 3: add/subtract until timing light confirms desired fixed timing value!'
1107 * units: deg btdc
1108 * offset 476
1109 */
1111 /**
1112 * 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.
1113 * units: coef
1114 * offset 480
1115 */
1117 /**
1118 * 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.
1119 * units: coef
1120 * offset 484
1121 */
1122 float vbattDividerCoeff;
1123 /**
1124 * Cooling fan turn-on temperature threshold, in Celsius
1125 * units: deg C
1126 * offset 488
1127 */
1128 float fanOnTemperature;
1129 /**
1130 * Cooling fan turn-off temperature threshold, in Celsius
1131 * units: deg C
1132 * offset 492
1133 */
1134 float fanOffTemperature;
1135 /**
1136 * offset 496
1137 */
1139 /**
1140 * need 4 byte alignment
1141 * units: units
1142 * offset 498
1143 */
1144 uint8_t alignmentFill_at_498[2] = {};
1145 /**
1146 * 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.
1147 * units: revs/km
1148 * offset 500
1149 */
1150 float driveWheelRevPerKm;
1151 /**
1152 * CANbus thread period in ms
1153 * units: ms
1154 * offset 504
1155 */
1156 int canSleepPeriodMs;
1157 /**
1158 * units: index
1159 * offset 508
1160 */
1162 /**
1163 * First throttle body, first sensor. See also pedalPositionAdcChannel
1164 * offset 512
1165 */
1167 /**
1168 * 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.
1169 * offset 513
1170 */
1172 /**
1173 * 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.
1174 * offset 514
1175 */
1177 /**
1178 * Second throttle body position sensor, single channel so far
1179 * offset 515
1180 */
1182 /**
1183 * 0.1 is a good default value
1184 * units: x
1185 * offset 516
1186 */
1188 /**
1189 * just a temporary solution
1190 * units: angle
1191 * offset 520
1192 */
1194 /**
1195 * offset 524
1196 */
1198 /**
1199 * Extra air taper amount
1200 * units: %
1201 * offset 536
1202 */
1203 float airByRpmTaper;
1204 /**
1205 * offset 540
1206 */
1208 /**
1209 * 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.
1210 * units: %
1211 * offset 541
1212 */
1214 /**
1215 * offset 542
1216 */
1218 /**
1219 * offset 543
1220 */
1221 uint8_t acrRevolutions;
1222 /**
1223 * offset 544
1224 */
1226 /**
1227 * units: volts
1228 * offset 548
1229 */
1230 float adcVcc;
1231 /**
1232 * Magic engine phase: we compare instant MAP at X to instant MAP at x+360 angle in one complete cycle
1233 * units: Deg
1234 * offset 552
1235 */
1237 /**
1238 * 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.
1239 * offset 556
1240 */
1241 brain_input_pin_e camInputs[CAM_INPUTS_COUNT] = {};
1242 /**
1243 * offset 564
1244 */
1246 /**
1247 * Electronic throttle pedal position first channel
1248 * See throttlePedalPositionSecondAdcChannel for second channel
1249 * See also tps1_1AdcChannel
1250 * See throttlePedalUpVoltage and throttlePedalWOTVoltage
1251 * offset 584
1252 */
1254 /**
1255 * TPS/PPS error threshold
1256 * units: %
1257 * offset 585
1258 */
1259 scaled_channel<uint8_t, 10, 1> etbSplit;
1260 /**
1261 * offset 586
1262 */
1264 /**
1265 * offset 588
1266 */
1268 /**
1269 * offset 589
1270 */
1272 /**
1273 * need 4 byte alignment
1274 * units: units
1275 * offset 590
1276 */
1277 uint8_t alignmentFill_at_590[2] = {};
1278 /**
1279 * @see hasBaroSensor
1280 * offset 592
1281 */
1283 /**
1284 * offset 604
1285 */
1287 /**
1288 * 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),
1289 * units: %
1290 * offset 616
1291 */
1292 scaled_channel<uint8_t, 10, 1> knockRetardAggression;
1293 /**
1294 * After a knock event, reapply timing at this rate.
1295 * units: deg/s
1296 * offset 617
1297 */
1298 scaled_channel<uint8_t, 10, 1> knockRetardReapplyRate;
1299 /**
1300 * Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync.
1301 * offset 618
1302 */
1304 /**
1305 * offset 619
1306 */
1308 /**
1309 * 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.
1310 * units: ratio
1311 * offset 620
1312 */
1313 scaled_channel<uint16_t, 1000, 1> vssGearRatio;
1314 /**
1315 * Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response.
1316 * offset 622
1317 */
1318 uint8_t vssFilterReciprocal;
1319 /**
1320 * 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.
1321 * units: count
1322 * offset 623
1323 */
1324 uint8_t vssToothCount;
1325 /**
1326 * Override the Y axis (load) value used for only the Idle VE table.
1327 * Advanced users only: If you aren't sure you need this, you probably don't need this.
1328 * offset 624
1329 */
1331 /**
1332 * need 4 byte alignment
1333 * units: units
1334 * offset 625
1335 */
1336 uint8_t alignmentFill_at_625[1] = {};
1337 /**
1338 * offset 626
1339 */
1340 Gpio l9779_cs;
1341 /**
1342 * offset 628
1343 */
1344 output_pin_e injectionPins[MAX_CYLINDER_COUNT] = {};
1345 /**
1346 * offset 652
1347 */
1348 output_pin_e ignitionPins[MAX_CYLINDER_COUNT] = {};
1349 /**
1350 * offset 676
1351 */
1353 /**
1354 * offset 677
1355 */
1357 /**
1358 * offset 678
1359 */
1361 /**
1362 * offset 680
1363 */
1365 /**
1366 * How many consecutive VVT gap rations have to match expected ranges for sync to happen
1367 * units: count
1368 * offset 681
1369 */
1371 /**
1372 * Check engine light, also malfunction indicator light. Always blinks once on boot.
1373 * offset 682
1374 */
1376 /**
1377 * offset 684
1378 */
1380 /**
1381 * offset 685
1382 */
1384 /**
1385 * offset 686
1386 */
1388 /**
1389 * Some cars have a switch to indicate that clutch pedal is all the way down
1390 * offset 688
1391 */
1393 /**
1394 * offset 690
1395 */
1397 /**
1398 * offset 692
1399 */
1401 /**
1402 * offset 693
1403 */
1405 /**
1406 * offset 694
1407 */
1408 Gpio digitalPotentiometerChipSelect[DIGIPOT_COUNT] = {};
1409 /**
1410 * offset 702
1411 */
1413 /**
1414 * offset 703
1415 */
1417 /**
1418 * offset 704
1419 */
1421 /**
1422 * Digital Potentiometer is used by stock ECU stimulation code
1423 * offset 706
1424 */
1426 /**
1427 * offset 707
1428 */
1430 /**
1431 * offset 708
1432 */
1434 /**
1435 * offset 710
1436 */
1438 /**
1439 * Useful in Research&Development phase
1440 * offset 711
1441 */
1443 /**
1444 * First throttle body, second sensor.
1445 * offset 712
1446 */
1448 /**
1449 * Second throttle body, second sensor.
1450 * offset 713
1451 */
1453 /**
1454 * Electronic throttle pedal position input
1455 * Second channel
1456 * See also tps1_1AdcChannel
1457 * See throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage
1458 * offset 714
1459 */
1461 /**
1462 * AFR, WBO, EGO - whatever you like to call it
1463 * offset 715
1464 */
1466 /**
1467 * offset 716
1468 */
1469 Gpio mc33810_cs[C_MC33810_COUNT] = {};
1470 /**
1471 * need 4 byte alignment
1472 * units: units
1473 * offset 718
1474 */
1475 uint8_t alignmentFill_at_718[2] = {};
1476 /**
1477 * 0.1 is a good default value
1478 * units: x
1479 * offset 720
1480 */
1481 float idle_antiwindupFreq;
1482 /**
1483 * offset 724
1484 */
1485 brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT] = {};
1486 /**
1487 * 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.
1488 * units: us
1489 * offset 728
1490 */
1491 uint16_t mc33_t_min_boost;
1492 /**
1493 * offset 730
1494 */
1496 /**
1497 * need 4 byte alignment
1498 * units: units
1499 * offset 731
1500 */
1501 uint8_t alignmentFill_at_731[1] = {};
1502 /**
1503 * Ratio between the wheels and your transmission output.
1504 * units: ratio
1505 * offset 732
1506 */
1507 scaled_channel<uint16_t, 100, 1> finalGearRatio;
1508 /**
1509 * offset 734
1510 */
1512 /**
1513 * offset 736
1514 */
1516 /**
1517 * need 4 byte alignment
1518 * units: units
1519 * offset 737
1520 */
1521 uint8_t alignmentFill_at_737[1] = {};
1522 /**
1523 * 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.
1524 * See also directSelfStimulation which is different.
1525 * offset 738
1526 */
1527 Gpio triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT] = {};
1528 /**
1529 * units: g/s
1530 * offset 742
1531 */
1532 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseSlope;
1533 /**
1534 * offset 744
1535 */
1536 pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT] = {};
1537 /**
1538 * offset 746
1539 */
1541 /**
1542 * need 4 byte alignment
1543 * units: units
1544 * offset 747
1545 */
1546 uint8_t alignmentFill_at_747[1] = {};
1547 /**
1548 * On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking.
1549 * offset 748
1550 */
1552 /**
1553 * offset 750
1554 */
1556 /**
1557 * units: RPM
1558 * offset 751
1559 */
1560 scaled_channel<uint8_t, 1, 100> lambdaProtectionMinRpm;
1561 /**
1562 * units: %
1563 * offset 752
1564 */
1565 scaled_channel<uint8_t, 1, 10> lambdaProtectionMinLoad;
1566 /**
1567 * need 4 byte alignment
1568 * units: units
1569 * offset 753
1570 */
1571 uint8_t alignmentFill_at_753[3] = {};
1572 /**
1573 offset 756 bit 0 */
1574 bool is_enabled_spi_1 : 1 {};
1575 /**
1576 offset 756 bit 1 */
1577 bool is_enabled_spi_2 : 1 {};
1578 /**
1579 offset 756 bit 2 */
1580 bool is_enabled_spi_3 : 1 {};
1581 /**
1582 * enable sd/disable sd
1583 offset 756 bit 3 */
1584 bool isSdCardEnabled : 1 {};
1585 /**
1586 * Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format.
1587 offset 756 bit 4 */
1588 bool rusefiVerbose29b : 1 {};
1589 /**
1590 offset 756 bit 5 */
1591 bool rethrowHardFault : 1 {};
1592 /**
1593 offset 756 bit 6 */
1594 bool isHip9011Enabled : 1 {};
1595 /**
1596 offset 756 bit 7 */
1597 bool requireFootOnBrakeToCrank : 1 {};
1598 /**
1599 offset 756 bit 8 */
1600 bool verboseQuad : 1 {};
1601 /**
1602 * This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed.
1603 offset 756 bit 9 */
1604 bool useStepperIdle : 1 {};
1605 /**
1606 offset 756 bit 10 */
1607 bool enabledStep1Limiter : 1 {};
1608 /**
1609 offset 756 bit 11 */
1610 bool useTpicAdvancedMode : 1 {};
1611 /**
1612 offset 756 bit 12 */
1613 bool lambdaProtectionEnable : 1 {};
1614 /**
1615 offset 756 bit 13 */
1616 bool verboseTLE8888 : 1 {};
1617 /**
1618 * CAN broadcast using custom rusEFI protocol
1619 * enable can_broadcast/disable can_broadcast
1620 offset 756 bit 14 */
1621 bool enableVerboseCanTx : 1 {};
1622 /**
1623 offset 756 bit 15 */
1624 bool externalRusEfiGdiModule : 1 {};
1625 /**
1626 offset 756 bit 16 */
1627 bool flipWboChannels : 1 {};
1628 /**
1629 * Useful for individual intakes
1630 offset 756 bit 17 */
1631 bool measureMapOnlyInOneCylinder : 1 {};
1632 /**
1633 offset 756 bit 18 */
1635 /**
1636 * 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.
1637 offset 756 bit 19 */
1638 bool isFasterEngineSpinUpEnabled : 1 {};
1639 /**
1640 * This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing.
1641 offset 756 bit 20 */
1642 bool coastingFuelCutEnabled : 1 {};
1643 /**
1644 * 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.
1645 offset 756 bit 21 */
1646 bool useIacTableForCoasting : 1 {};
1647 /**
1648 offset 756 bit 22 */
1649 bool useNoiselessTriggerDecoder : 1 {};
1650 /**
1651 offset 756 bit 23 */
1652 bool useIdleTimingPidControl : 1 {};
1653 /**
1654 * 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.
1655 offset 756 bit 24 */
1656 bool disableEtbWhenEngineStopped : 1 {};
1657 /**
1658 offset 756 bit 25 */
1659 bool is_enabled_spi_4 : 1 {};
1660 /**
1661 * Disable the electronic throttle motor and DC idle motor for testing.
1662 * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle.
1663 offset 756 bit 26 */
1664 bool pauseEtbControl : 1 {};
1665 /**
1666 offset 756 bit 27 */
1667 bool tpsTpsPercentMode : 1 {};
1668 /**
1669 offset 756 bit 28 */
1670 bool verboseKLine : 1 {};
1671 /**
1672 offset 756 bit 29 */
1673 bool idleIncrementalPidCic : 1 {};
1674 /**
1675 * AEM X-Series or rusEFI Wideband
1676 offset 756 bit 30 */
1677 bool enableAemXSeries : 1 {};
1678 /**
1679 offset 756 bit 31 */
1680 bool unused32nd : 1 {};
1681 /**
1682 * offset 760
1683 */
1684 brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT] = {};
1685 /**
1686 * offset 768
1687 */
1689 /**
1690 * need 4 byte alignment
1691 * units: units
1692 * offset 769
1693 */
1694 uint8_t alignmentFill_at_769[1] = {};
1695 /**
1696 * offset 770
1697 */
1699 /**
1700 * offset 772
1701 */
1703 /**
1704 * offset 774
1705 */
1707 /**
1708 * need 4 byte alignment
1709 * units: units
1710 * offset 775
1711 */
1712 uint8_t alignmentFill_at_775[1] = {};
1713 /**
1714 * offset 776
1715 */
1716 uint32_t verboseCanBaseAddress;
1717 /**
1718 * Boost Voltage
1719 * units: v
1720 * offset 780
1721 */
1722 uint8_t mc33_hvolt;
1723 /**
1724 * need 4 byte alignment
1725 * units: units
1726 * offset 781
1727 */
1728 uint8_t alignmentFill_at_781[1] = {};
1729 /**
1730 * Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost.
1731 * units: kPa
1732 * offset 782
1733 */
1735 /**
1736 * units: %
1737 * offset 784
1738 */
1740 /**
1741 * units: %
1742 * offset 785
1743 */
1745 /**
1746 * offset 786
1747 */
1749 /**
1750 * offset 787
1751 */
1753 /**
1754 * offset 788
1755 */
1757 /**
1758 * need 4 byte alignment
1759 * units: units
1760 * offset 789
1761 */
1762 uint8_t alignmentFill_at_789[1] = {};
1763 /**
1764 * units: kg
1765 * offset 790
1766 */
1767 uint16_t vehicleWeight;
1768 /**
1769 * How far above idle speed do we consider idling, i.e. coasting detection threshold.
1770 * For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.
1771 * units: RPM
1772 * offset 792
1773 */
1774 int16_t idlePidRpmUpperLimit;
1775 /**
1776 * Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment.
1777 * units: ms
1778 * offset 794
1779 */
1780 scaled_channel<uint16_t, 1000, 1> applyNonlinearBelowPulse;
1781 /**
1782 * offset 796
1783 */
1785 /**
1786 * offset 798
1787 */
1789 /**
1790 * offset 800
1791 */
1793 /**
1794 * Some vehicles have a switch to indicate that clutch pedal is all the way up
1795 * offset 802
1796 */
1798 /**
1799 * offset 804
1800 */
1802 /**
1803 * offset 805
1804 */
1806 /**
1807 * offset 806
1808 */
1809 Gpio max31855_cs[EGT_CHANNEL_COUNT] = {};
1810 /**
1811 * Continental/GM flex fuel sensor, 50-150hz type
1812 * offset 822
1813 */
1815 /**
1816 * 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
1817 * units: rpm
1818 * offset 824
1819 */
1820 uint16_t torqueReductionArmingRpm;
1821 /**
1822 * offset 826
1823 */
1825 /**
1826 * offset 827
1827 */
1829 /**
1830 * Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0
1831 * units: :1
1832 * offset 828
1833 */
1834 scaled_channel<uint8_t, 10, 1> stoichRatioSecondary;
1835 /**
1836 * Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open.
1837 * units: %
1838 * offset 829
1839 */
1840 uint8_t etbMaximumPosition;
1841 /**
1842 * Rate the ECU will log to the SD card, in hz (log lines per second).
1843 * units: hz
1844 * offset 830
1845 */
1846 uint16_t sdCardLogFrequency;
1847 /**
1848 * offset 832
1849 */
1851 /**
1852 * need 4 byte alignment
1853 * units: units
1854 * offset 833
1855 */
1856 uint8_t alignmentFill_at_833[1] = {};
1857 /**
1858 * offset 834
1859 */
1860 uint16_t launchCorrectionsEndRpm;
1861 /**
1862 * offset 836
1863 */
1865 /**
1866 * On some vehicles we can disable starter once engine is already running
1867 * offset 838
1868 */
1870 /**
1871 * need 4 byte alignment
1872 * units: units
1873 * offset 839
1874 */
1875 uint8_t alignmentFill_at_839[1] = {};
1876 /**
1877 * Some Subaru and some Mazda use double-solenoid idle air valve
1878 * offset 840
1879 */
1881 /**
1882 * See also starterControlPin
1883 * offset 842
1884 */
1886 /**
1887 * units: RPM
1888 * offset 844
1889 */
1890 scaled_channel<uint8_t, 1, 100> lambdaProtectionRestoreRpm;
1891 /**
1892 * offset 845
1893 */
1895 /**
1896 * need 4 byte alignment
1897 * units: units
1898 * offset 846
1899 */
1900 uint8_t alignmentFill_at_846[2] = {};
1901 /**
1902 * 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.
1903 * units: count
1904 * offset 848
1905 */
1907 /**
1908 * 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%.
1909 * units: %
1910 * offset 852
1911 */
1913 /**
1914 * units: %
1915 * offset 854
1916 */
1918 /**
1919 * units: ADC
1920 * offset 856
1921 */
1922 uint16_t tps1SecondaryMin;
1923 /**
1924 * units: ADC
1925 * offset 858
1926 */
1927 uint16_t tps1SecondaryMax;
1928 /**
1929 * units: rpm
1930 * offset 860
1931 */
1932 int16_t antiLagRpmTreshold;
1933 /**
1934 * Maximum time to crank starter when start/stop button is pressed
1935 * units: Seconds
1936 * offset 862
1937 */
1938 uint16_t startCrankingDuration;
1939 /**
1940 * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
1941 * offset 864
1942 */
1944 /**
1945 * offset 866
1946 */
1948 /**
1949 * need 4 byte alignment
1950 * units: units
1951 * offset 867
1952 */
1953 uint8_t alignmentFill_at_867[1] = {};
1954 /**
1955 * offset 868
1956 */
1958 /**
1959 * units: %
1960 * offset 870
1961 */
1962 uint8_t lambdaProtectionMinTps;
1963 /**
1964 * Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed
1965 * units: s
1966 * offset 871
1967 */
1968 scaled_channel<uint8_t, 10, 1> lambdaProtectionTimeout;
1969 /**
1970 * offset 872
1971 */
1972 script_setting_t scriptSetting[SCRIPT_SETTING_COUNT] = {};
1973 /**
1974 * offset 904
1975 */
1977 /**
1978 * offset 906
1979 */
1981 /**
1982 * offset 908
1983 */
1985 /**
1986 * offset 910
1987 */
1989 /**
1990 * offset 912
1991 */
1993 /**
1994 * offset 914
1995 */
1997 /**
1998 * offset 916
1999 */
2001 /**
2002 * offset 918
2003 */
2005 /**
2006 * offset 920
2007 */
2009 /**
2010 * Saab Combustion Detection Module knock signal input pin
2011 * also known as Saab Ion Sensing Module
2012 * offset 922
2013 */
2015 /**
2016 * offset 924
2017 */
2019 /**
2020 * rusEFI console Sensor Sniffer mode
2021 * offset 925
2022 */
2023 sensor_chart_e sensorChartMode;
2024 /**
2025 * offset 926
2026 */
2027 maf_sensor_type_e mafSensorType;
2028 /**
2029 * need 4 byte alignment
2030 * units: units
2031 * offset 927
2032 */
2033 uint8_t alignmentFill_at_927[1] = {};
2034 /**
2035 offset 928 bit 0 */
2036 bool clutchUpPinInverted : 1 {};
2037 /**
2038 offset 928 bit 1 */
2039 bool clutchDownPinInverted : 1 {};
2040 /**
2041 * If enabled we use two H-bridges to drive stepper idle air valve
2042 offset 928 bit 2 */
2044 /**
2045 offset 928 bit 3 */
2046 bool multisparkEnable : 1 {};
2047 /**
2048 offset 928 bit 4 */
2049 bool enableLaunchRetard : 1 {};
2050 /**
2051 offset 928 bit 5 */
2052 bool canInputBCM : 1 {};
2053 /**
2054 * This property is useful if using rusEFI as TCM or BCM only
2055 offset 928 bit 6 */
2056 bool consumeObdSensors : 1 {};
2057 /**
2058 * Read VSS from OEM CAN bus according to selected CAN vehicle configuration.
2059 offset 928 bit 7 */
2060 bool enableCanVss : 1 {};
2061 /**
2062 offset 928 bit 8 */
2063 bool suppressWboWorkaround7048 : 1 {};
2064 /**
2065 * 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.
2066 offset 928 bit 9 */
2067 bool stftIgnoreErrorMagnitude : 1 {};
2068 /**
2069 offset 928 bit 10 */
2071 /**
2072 offset 928 bit 11 */
2073 bool enableSoftwareKnock : 1 {};
2074 /**
2075 * Verbose info in console below engineSnifferRpmThreshold
2076 * enable vvt_details
2077 offset 928 bit 12 */
2078 bool verboseVVTDecoding : 1 {};
2079 /**
2080 offset 928 bit 13 */
2081 bool invertCamVVTSignal : 1 {};
2082 /**
2083 * In Alpha-N mode, compensate for air temperature.
2084 offset 928 bit 14 */
2085 bool alphaNUseIat : 1 {};
2086 /**
2087 offset 928 bit 15 */
2088 bool knockBankCyl1 : 1 {};
2089 /**
2090 offset 928 bit 16 */
2091 bool knockBankCyl2 : 1 {};
2092 /**
2093 offset 928 bit 17 */
2094 bool knockBankCyl3 : 1 {};
2095 /**
2096 offset 928 bit 18 */
2097 bool knockBankCyl4 : 1 {};
2098 /**
2099 offset 928 bit 19 */
2100 bool knockBankCyl5 : 1 {};
2101 /**
2102 offset 928 bit 20 */
2103 bool knockBankCyl6 : 1 {};
2104 /**
2105 offset 928 bit 21 */
2106 bool knockBankCyl7 : 1 {};
2107 /**
2108 offset 928 bit 22 */
2109 bool knockBankCyl8 : 1 {};
2110 /**
2111 offset 928 bit 23 */
2112 bool knockBankCyl9 : 1 {};
2113 /**
2114 offset 928 bit 24 */
2115 bool knockBankCyl10 : 1 {};
2116 /**
2117 offset 928 bit 25 */
2118 bool knockBankCyl11 : 1 {};
2119 /**
2120 offset 928 bit 26 */
2121 bool knockBankCyl12 : 1 {};
2122 /**
2123 offset 928 bit 27 */
2124 bool tcuEnabled : 1 {};
2125 /**
2126 offset 928 bit 28 */
2127 bool canBroadcastUseChannelTwo : 1 {};
2128 /**
2129 * If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils
2130 offset 928 bit 29 */
2132 /**
2133 * Print incoming and outgoing second bus CAN messages in rusEFI console
2134 offset 928 bit 30 */
2135 bool verboseCan2 : 1 {};
2136 /**
2137 offset 928 bit 31 */
2138 bool unusedBit_334_31 : 1 {};
2139 /**
2140 * offset 932
2141 */
2142 dc_io etbIo[ETB_COUNT] = {};
2143 /**
2144 * Wastegate control Solenoid
2145 * offset 948
2146 */
2148 /**
2149 * offset 950
2150 */
2152 /**
2153 * need 4 byte alignment
2154 * units: units
2155 * offset 951
2156 */
2157 uint8_t alignmentFill_at_951[1] = {};
2158 /**
2159 * offset 952
2160 */
2162 /**
2163 * offset 954
2164 */
2166 /**
2167 * offset 956
2168 */
2170 /**
2171 * offset 976
2172 */
2174 /**
2175 * offset 977
2176 */
2178 /**
2179 * offset 978
2180 */
2182 /**
2183 * units: Hz
2184 * offset 980
2185 */
2187 /**
2188 * offset 984
2189 */
2191 /**
2192 * offset 985
2193 */
2195 /**
2196 * How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs.
2197 * units: sec
2198 * offset 986
2199 */
2200 scaled_channel<uint8_t, 20, 1> tpsAccelLookback;
2201 /**
2202 * 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.
2203 * units: sec
2204 * offset 987
2205 */
2206 scaled_channel<uint8_t, 10, 1> noFuelTrimAfterDfcoTime;
2207 /**
2208 * Launch disabled above this speed if setting is above zero
2209 * units: Kph
2210 * offset 988
2211 */
2213 /**
2214 * Starting Launch RPM window to activate (subtracts from Launch RPM)
2215 * units: RPM
2216 * offset 992
2217 */
2218 int launchRpmWindow;
2219 /**
2220 * units: ms
2221 * offset 996
2222 */
2224 /**
2225 * offset 1000
2226 */
2227 float mapExpAverageAlpha;
2228 /**
2229 * offset 1004
2230 */
2232 /**
2233 * offset 1008
2234 */
2235 float turbochargerFilter;
2236 /**
2237 * offset 1012
2238 */
2240 /**
2241 * offset 1016
2242 */
2243 float launchActivateDelay;
2244 /**
2245 * offset 1020
2246 */
2247 stft_s stft;
2248 /**
2249 * offset 1048
2250 */
2251 dc_io stepperDcIo[DC_PER_STEPPER] = {};
2252 /**
2253 * For example, BMW, GM or Chevrolet
2254 * REQUIRED for rusEFI Online
2255 * offset 1064
2256 */
2258 /**
2259 * For example, LS1 or NB2
2260 * REQUIRED for rusEFI Online
2261 * offset 1096
2262 */
2264 /**
2265 * For example, Hunchback or Orange Miata
2266 * Vehicle name has to be unique between your vehicles.
2267 * REQUIRED for rusEFI Online
2268 * offset 1128
2269 */
2271 /**
2272 * offset 1160
2273 */
2274 output_pin_e tcu_solenoid[TCU_SOLENOID_COUNT] = {};
2275 /**
2276 * offset 1172
2277 */
2278 dc_function_e etbFunctions[ETB_COUNT] = {};
2279 /**
2280 * offset 1174
2281 */
2283 /**
2284 * need 4 byte alignment
2285 * units: units
2286 * offset 1175
2287 */
2288 uint8_t alignmentFill_at_1175[1] = {};
2289 /**
2290 * offset 1176
2291 */
2293 /**
2294 * offset 1178
2295 */
2297 /**
2298 * need 4 byte alignment
2299 * units: units
2300 * offset 1179
2301 */
2302 uint8_t alignmentFill_at_1179[1] = {};
2303 /**
2304 * offset 1180
2305 */
2307 /**
2308 * offset 1182
2309 */
2310 output_pin_e luaOutputPins[LUA_PWM_COUNT] = {};
2311 /**
2312 * need 4 byte alignment
2313 * units: units
2314 * offset 1198
2315 */
2316 uint8_t alignmentFill_at_1198[2] = {};
2317 /**
2318 * Angle between cam sensor and VVT zero position
2319 * units: value
2320 * offset 1200
2321 */
2322 float vvtOffsets[CAM_INPUTS_COUNT] = {};
2323 /**
2324 * offset 1216
2325 */
2326 vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT] = {};
2327 /**
2328 * offset 1248
2329 */
2330 gppwm_note_t gpPwmNote[GPPWM_CHANNELS] = {};
2331 /**
2332 * units: ADC
2333 * offset 1312
2334 */
2335 uint16_t tps2SecondaryMin;
2336 /**
2337 * units: ADC
2338 * offset 1314
2339 */
2340 uint16_t tps2SecondaryMax;
2341 /**
2342 * Select which bus the wideband controller is attached to.
2343 offset 1316 bit 0 */
2344 bool widebandOnSecondBus : 1 {};
2345 /**
2346 * Enables lambda sensor closed loop feedback for fuelling.
2347 offset 1316 bit 1 */
2349 /**
2350 * Write SD card log even when powered by USB
2351 offset 1316 bit 2 */
2352 bool alwaysWriteSdCard : 1 {};
2353 /**
2354 * Second harmonic (aka double) is usually quieter background noise
2355 offset 1316 bit 3 */
2357 /**
2358 offset 1316 bit 4 */
2359 bool yesUnderstandLocking : 1 {};
2360 /**
2361 * Sometimes we have a performance issue while printing error
2362 offset 1316 bit 5 */
2363 bool silentTriggerError : 1 {};
2364 /**
2365 offset 1316 bit 6 */
2366 bool useLinearCltSensor : 1 {};
2367 /**
2368 * enable can_read/disable can_read
2369 offset 1316 bit 7 */
2370 bool canReadEnabled : 1 {};
2371 /**
2372 * enable can_write/disable can_write. See also can1ListenMode
2373 offset 1316 bit 8 */
2374 bool canWriteEnabled : 1 {};
2375 /**
2376 offset 1316 bit 9 */
2377 bool useLinearIatSensor : 1 {};
2378 /**
2379 offset 1316 bit 10 */
2380 bool enableOilPressureProtect : 1 {};
2381 /**
2382 * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
2383 offset 1316 bit 11 */
2384 bool tachPulseDurationAsDutyCycle : 1 {};
2385 /**
2386 * This enables smart alternator control and activates the extra alternator settings.
2387 offset 1316 bit 12 */
2388 bool isAlternatorControlEnabled : 1 {};
2389 /**
2390 * https://wiki.rusefi.com/Trigger-Configuration-Guide
2391 * This setting flips the signal from the primary engine speed sensor.
2392 offset 1316 bit 13 */
2393 bool invertPrimaryTriggerSignal : 1 {};
2394 /**
2395 * https://wiki.rusefi.com/Trigger-Configuration-Guide
2396 * This setting flips the signal from the secondary engine speed sensor.
2397 offset 1316 bit 14 */
2398 bool invertSecondaryTriggerSignal : 1 {};
2399 /**
2400 offset 1316 bit 15 */
2401 bool cutFuelOnHardLimit : 1 {};
2402 /**
2403 * Be careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer.
2404 offset 1316 bit 16 */
2405 bool cutSparkOnHardLimit : 1 {};
2406 /**
2407 offset 1316 bit 17 */
2408 bool launchFuelCutEnable : 1 {};
2409 /**
2410 * This is the Cut Mode normally used
2411 offset 1316 bit 18 */
2412 bool launchSparkCutEnable : 1 {};
2413 /**
2414 offset 1316 bit 19 */
2415 bool torqueReductionEnabled : 1 {};
2416 /**
2417 offset 1316 bit 20 */
2419 /**
2420 offset 1316 bit 21 */
2421 bool limitTorqueReductionTime : 1 {};
2422 /**
2423 * Are you a developer troubleshooting TS over CAN ISO/TP?
2424 offset 1316 bit 22 */
2425 bool verboseIsoTp : 1 {};
2426 /**
2427 offset 1316 bit 23 */
2428 bool engineSnifferFocusOnInputs : 1 {};
2429 /**
2430 offset 1316 bit 24 */
2431 bool launchActivateInverted : 1 {};
2432 /**
2433 offset 1316 bit 25 */
2434 bool twoStroke : 1 {};
2435 /**
2436 * Where is your primary skipped wheel located?
2437 offset 1316 bit 26 */
2438 bool skippedWheelOnCam : 1 {};
2439 /**
2440 offset 1316 bit 27 */
2441 bool unusedBit_405_27 : 1 {};
2442 /**
2443 offset 1316 bit 28 */
2444 bool unusedBit_405_28 : 1 {};
2445 /**
2446 offset 1316 bit 29 */
2447 bool unusedBit_405_29 : 1 {};
2448 /**
2449 offset 1316 bit 30 */
2450 bool unusedBit_405_30 : 1 {};
2451 /**
2452 offset 1316 bit 31 */
2453 bool unusedBit_405_31 : 1 {};
2454 /**
2455 * offset 1320
2456 */
2458 /**
2459 * need 4 byte alignment
2460 * units: units
2461 * offset 1321
2462 */
2463 uint8_t alignmentFill_at_1321[1] = {};
2464 /**
2465 * A/C button input
2466 * offset 1322
2467 */
2469 /**
2470 * offset 1324
2471 */
2473 /**
2474 * Expected neutral position
2475 * units: %
2476 * offset 1325
2477 */
2478 uint8_t etbNeutralPosition;
2479 /**
2480 * See also idleRpmPid
2481 * offset 1326
2482 */
2484 /**
2485 * need 4 byte alignment
2486 * units: units
2487 * offset 1327
2488 */
2489 uint8_t alignmentFill_at_1327[1] = {};
2490 /**
2491 offset 1328 bit 0 */
2492 bool isInjectionEnabled : 1 {};
2493 /**
2494 offset 1328 bit 1 */
2495 bool isIgnitionEnabled : 1 {};
2496 /**
2497 * When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders.
2498 offset 1328 bit 2 */
2499 bool isCylinderCleanupEnabled : 1 {};
2500 /**
2501 * Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?
2502 offset 1328 bit 3 */
2503 bool complexWallModel : 1 {};
2504 /**
2505 * RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution
2506 offset 1328 bit 4 */
2507 bool alwaysInstantRpm : 1 {};
2508 /**
2509 offset 1328 bit 5 */
2510 bool isMapAveragingEnabled : 1 {};
2511 /**
2512 * If enabled, use separate temperature multiplier table for cranking idle position.
2513 * If disabled, use normal running multiplier table applied to the cranking base position.
2514 offset 1328 bit 6 */
2515 bool overrideCrankingIacSetting : 1 {};
2516 /**
2517 * 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.
2518 offset 1328 bit 7 */
2519 bool useSeparateAdvanceForIdle : 1 {};
2520 /**
2521 offset 1328 bit 8 */
2522 bool isWaveAnalyzerEnabled : 1 {};
2523 /**
2524 * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
2525 offset 1328 bit 9 */
2526 bool useSeparateVeForIdle : 1 {};
2527 /**
2528 * Verbose info in console below engineSnifferRpmThreshold
2529 * enable trigger_details
2530 offset 1328 bit 10 */
2531 bool verboseTriggerSynchDetails : 1 {};
2532 /**
2533 offset 1328 bit 11 */
2534 bool cutFuelInAcr : 1 {};
2535 /**
2536 offset 1328 bit 12 */
2537 bool hondaK : 1 {};
2538 /**
2539 * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
2540 offset 1328 bit 13 */
2541 bool twoWireBatchIgnition : 1 {};
2542 /**
2543 * Read MAP sensor on ECU start-up to use as baro value.
2544 offset 1328 bit 14 */
2545 bool useFixedBaroCorrFromMap : 1 {};
2546 /**
2547 * In Constant mode, timing is automatically tapered to running as RPM increases.
2548 * In Table mode, the "Cranking ignition advance" table is used directly.
2549 offset 1328 bit 15 */
2551 /**
2552 * This enables the various ignition corrections during cranking (IAT, CLT and PID idle).
2553 * You probably don't need this.
2554 offset 1328 bit 16 */
2556 /**
2557 * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
2558 offset 1328 bit 17 */
2559 bool flexCranking : 1 {};
2560 /**
2561 * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
2562 offset 1328 bit 18 */
2563 bool useIacPidMultTable : 1 {};
2564 /**
2565 offset 1328 bit 19 */
2566 bool isBoostControlEnabled : 1 {};
2567 /**
2568 * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
2569 offset 1328 bit 20 */
2570 bool launchSmoothRetard : 1 {};
2571 /**
2572 * Some engines are OK running semi-random sequential while other engine require phase synchronization
2573 offset 1328 bit 21 */
2575 /**
2576 * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
2577 offset 1328 bit 22 */
2578 bool useCltBasedRpmLimit : 1 {};
2579 /**
2580 * If enabled, don't wait for engine start to heat O2 sensors.
2581 * WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
2582 offset 1328 bit 23 */
2583 bool forceO2Heating : 1 {};
2584 /**
2585 * 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'.
2586 offset 1328 bit 24 */
2587 bool invertVvtControlIntake : 1 {};
2588 /**
2589 * 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'.
2590 offset 1328 bit 25 */
2591 bool invertVvtControlExhaust : 1 {};
2592 /**
2593 offset 1328 bit 26 */
2594 bool useBiQuadOnAuxSpeedSensors : 1 {};
2595 /**
2596 * '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.
2597 offset 1328 bit 27 */
2598 bool sdTriggerLog : 1 {};
2599 /**
2600 offset 1328 bit 28 */
2601 bool ALSActivateInverted : 1 {};
2602 /**
2603 offset 1328 bit 29 */
2604 bool stepper_dc_use_two_wires : 1 {};
2605 /**
2606 offset 1328 bit 30 */
2607 bool watchOutForLinearTime : 1 {};
2608 /**
2609 offset 1328 bit 31 */
2610 bool unusedBit_448_31 : 1 {};
2611 /**
2612 * units: count
2613 * offset 1332
2614 */
2615 uint32_t engineChartSize;
2616 /**
2617 * units: mult
2618 * offset 1336
2619 */
2621 /**
2622 * offset 1340
2623 */
2624 Gpio camInputsDebug[CAM_INPUTS_COUNT] = {};
2625 /**
2626 * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
2627 * units: RPM
2628 * offset 1348
2629 */
2630 int16_t acIdleRpmTarget;
2631 /**
2632 * set warningPeriod X
2633 * units: seconds
2634 * offset 1350
2635 */
2636 int16_t warningPeriod;
2637 /**
2638 * units: angle
2639 * offset 1352
2640 */
2642 /**
2643 * units: angle
2644 * offset 1356
2645 */
2647 /**
2648 * units: ms
2649 * offset 1360
2650 */
2652 /**
2653 * units: count
2654 * offset 1364
2655 */
2657 /**
2658 * Pedal position to realize that we need to reduce torque when the trigger pin is uuuh triggered
2659 * offset 1368
2660 */
2662 /**
2663 * Duration in ms or duty cycle depending on selected mode
2664 * offset 1372
2665 */
2667 /**
2668 * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
2669 * units: Seconds
2670 * offset 1376
2671 */
2672 float wwaeTau;
2673 /**
2674 * offset 1380
2675 */
2677 /**
2678 * offset 1400
2679 */
2680 pid_s etb;
2681 /**
2682 * offset 1420
2683 */
2684 Gpio triggerInputDebugPins[TRIGGER_INPUT_PIN_COUNT] = {};
2685 /**
2686 * RPM range above upper limit for extra air taper
2687 * units: RPM
2688 * offset 1424
2689 */
2690 int16_t airTaperRpmRange;
2691 /**
2692 * offset 1426
2693 */
2695 /**
2696 * Closed throttle#2. todo: extract these two fields into a structure
2697 * See also tps2_1AdcChannel
2698 * units: ADC
2699 * offset 1428
2700 */
2701 int16_t tps2Min;
2702 /**
2703 * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!
2704 * See also tps1_1AdcChannel
2705 * units: ADC
2706 * offset 1430
2707 */
2708 int16_t tps2Max;
2709 /**
2710 * See also startStopButtonPin
2711 * offset 1432
2712 */
2714 /**
2715 * offset 1434
2716 */
2718 /**
2719 * need 4 byte alignment
2720 * units: units
2721 * offset 1435
2722 */
2723 uint8_t alignmentFill_at_1435[1] = {};
2724 /**
2725 * offset 1436
2726 */
2728 /**
2729 * units: Pulse
2730 * offset 1438
2731 */
2732 uint8_t tachPulsePerRev;
2733 /**
2734 * need 4 byte alignment
2735 * units: units
2736 * offset 1439
2737 */
2738 uint8_t alignmentFill_at_1439[1] = {};
2739 /**
2740 * kPa value which is too low to be true
2741 * units: kPa
2742 * offset 1440
2743 */
2745 /**
2746 * kPa value which is too high to be true
2747 * units: kPa
2748 * offset 1444
2749 */
2751 /**
2752 * How long to wait for the spark to fire before recharging the coil for another spark.
2753 * units: ms
2754 * offset 1448
2755 */
2756 scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
2757 /**
2758 * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
2759 * units: ms
2760 * offset 1450
2761 */
2762 scaled_channel<uint16_t, 1000, 1> multisparkDwell;
2763 /**
2764 * See cltIdleRpmBins
2765 * offset 1452
2766 */
2768 /**
2769 * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
2770 * units: Fraction
2771 * offset 1472
2772 */
2773 float wwaeBeta;
2774 /**
2775 * See also EFI_CONSOLE_RX_BRAIN_PIN
2776 * offset 1476
2777 */
2779 /**
2780 * offset 1478
2781 */
2783 /**
2784 * offset 1480
2785 */
2786 Gpio auxValves[AUX_DIGITAL_VALVE_COUNT] = {};
2787 /**
2788 * offset 1484
2789 */
2791 /**
2792 * offset 1486
2793 */
2795 /**
2796 * units: voltage
2797 * offset 1488
2798 */
2800 /**
2801 * Pedal in the floor
2802 * units: voltage
2803 * offset 1492
2804 */
2806 /**
2807 * on IGN voltage detection turn fuel pump on to build fuel pressure
2808 * units: seconds
2809 * offset 1496
2810 */
2812 /**
2813 * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
2814 * units: RPM
2815 * offset 1498
2816 */
2817 int16_t idlePidRpmDeadZone;
2818 /**
2819 * 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
2820 * units: ms
2821 * offset 1500
2822 */
2823 float torqueReductionTime;
2824 /**
2825 * See Over/Undervoltage Shutdown/Retry bit in documentation
2826 offset 1504 bit 0 */
2827 bool mc33810DisableRecoveryMode : 1 {};
2828 /**
2829 offset 1504 bit 1 */
2830 bool mc33810Gpgd0Mode : 1 {};
2831 /**
2832 offset 1504 bit 2 */
2833 bool mc33810Gpgd1Mode : 1 {};
2834 /**
2835 offset 1504 bit 3 */
2836 bool mc33810Gpgd2Mode : 1 {};
2837 /**
2838 offset 1504 bit 4 */
2839 bool mc33810Gpgd3Mode : 1 {};
2840 /**
2841 * Send out board statistics
2842 offset 1504 bit 5 */
2843 bool enableExtendedCanBroadcast : 1 {};
2844 /**
2845 * global_can_data performance hack
2846 offset 1504 bit 6 */
2847 bool luaCanRxWorkaround : 1 {};
2848 /**
2849 offset 1504 bit 7 */
2850 bool flexSensorInverted : 1 {};
2851 /**
2852 offset 1504 bit 8 */
2853 bool useHardSkipInTraction : 1 {};
2854 /**
2855 * Use Aux Speed 1 as one of speeds for wheel slip ratio?
2856 offset 1504 bit 9 */
2857 bool useAuxSpeedForSlipRatio : 1 {};
2858 /**
2859 * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
2860 offset 1504 bit 10 */
2861 bool useVssAsSecondWheelSpeed : 1 {};
2862 /**
2863 offset 1504 bit 11 */
2864 bool is_enabled_spi_5 : 1 {};
2865 /**
2866 offset 1504 bit 12 */
2867 bool is_enabled_spi_6 : 1 {};
2868 /**
2869 * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
2870 offset 1504 bit 13 */
2871 bool enableAemXSeriesEgt : 1 {};
2872 /**
2873 offset 1504 bit 14 */
2874 bool startRequestPinInverted : 1 {};
2875 /**
2876 offset 1504 bit 15 */
2877 bool tcu_rangeSensorPulldown : 1 {};
2878 /**
2879 offset 1504 bit 16 */
2880 bool brakePedalPinInverted : 1 {};
2881 /**
2882 offset 1504 bit 17 */
2883 bool devBit0 : 1 {};
2884 /**
2885 offset 1504 bit 18 */
2886 bool devBit1 : 1 {};
2887 /**
2888 offset 1504 bit 19 */
2889 bool devBit2 : 1 {};
2890 /**
2891 offset 1504 bit 20 */
2892 bool devBit3 : 1 {};
2893 /**
2894 offset 1504 bit 21 */
2895 bool devBit4 : 1 {};
2896 /**
2897 offset 1504 bit 22 */
2898 bool devBit5 : 1 {};
2899 /**
2900 offset 1504 bit 23 */
2901 bool devBit6 : 1 {};
2902 /**
2903 offset 1504 bit 24 */
2904 bool devBit7 : 1 {};
2905 /**
2906 offset 1504 bit 25 */
2907 bool invertExhaustCamVVTSignal : 1 {};
2908 /**
2909 * "Available via TS Plugin see https://rusefi.com/s/knock"
2910 offset 1504 bit 26 */
2911 bool enableKnockSpectrogram : 1 {};
2912 /**
2913 offset 1504 bit 27 */
2914 bool enableKnockSpectrogramFilter : 1 {};
2915 /**
2916 offset 1504 bit 28 */
2917 bool unusedBit_518_28 : 1 {};
2918 /**
2919 offset 1504 bit 29 */
2920 bool unusedBit_518_29 : 1 {};
2921 /**
2922 offset 1504 bit 30 */
2923 bool unusedBit_518_30 : 1 {};
2924 /**
2925 offset 1504 bit 31 */
2926 bool unusedBit_518_31 : 1 {};
2927 /**
2928 * 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.\Should be 100 once tune is better
2929 * units: cycles
2930 * offset 1508
2931 */
2933 /**
2934 * IAC Value added when coasting and transitioning into idle.
2935 * units: percent
2936 * offset 1510
2937 */
2938 int16_t iacByTpsTaper;
2939 /**
2940 * offset 1512
2941 */
2943 /**
2944 * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2945 * units: kph
2946 * offset 1514
2947 */
2948 uint8_t coastingFuelCutVssLow;
2949 /**
2950 * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2951 * units: kph
2952 * offset 1515
2953 */
2954 uint8_t coastingFuelCutVssHigh;
2955 /**
2956 * 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.
2957 * units: roc
2958 * offset 1516
2959 */
2961 /**
2962 * offset 1520
2963 */
2964 brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT] = {};
2965 /**
2966 * offset 1524
2967 */
2968 uint8_t totalGearsCount;
2969 /**
2970 * Sets what part of injection's is controlled by the injection phase table.
2971 * offset 1525
2972 */
2974 /**
2975 * See http://rusefi.com/s/debugmode
2976 * offset 1526
2977 */
2979 /**
2980 * Additional idle % when fan #1 is active
2981 * units: %
2982 * offset 1527
2983 */
2984 uint8_t fan1ExtraIdle;
2985 /**
2986 * Band rate for primary TTL
2987 * units: BPs
2988 * offset 1528
2989 */
2990 uint32_t uartConsoleSerialSpeed;
2991 /**
2992 * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
2993 * units: roc
2994 * offset 1532
2995 */
2997 /**
2998 * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
2999 * units: coeff
3000 * offset 1536
3001 */
3003 /**
3004 * How many degrees of timing advance will be reduced during the Torque Reduction Time
3005 * units: deg
3006 * offset 1540
3007 */
3009 /**
3010 * units: voltage
3011 * offset 1544
3012 */
3014 /**
3015 * Pedal in the floor
3016 * units: voltage
3017 * offset 1548
3018 */
3020 /**
3021 * offset 1552
3022 */
3024 /**
3025 * Override the Y axis (load) value used for the VE table.
3026 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3027 * offset 1553
3028 */
3030 /**
3031 * offset 1554
3032 */
3034 /**
3035 * Override the Y axis (load) value used for the AFR table.
3036 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3037 * offset 1555
3038 */
3040 /**
3041 * units: A
3042 * offset 1556
3043 */
3044 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3045 /**
3046 * units: A
3047 * offset 1557
3048 */
3049 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
3050 /**
3051 * How long to deactivate power when hold current is reached before applying power again
3052 * units: us
3053 * offset 1558
3054 */
3055 uint8_t mc33_hpfp_i_hold_off;
3056 /**
3057 * Maximum amount of time the solenoid can be active before assuming a programming error
3058 * units: ms
3059 * offset 1559
3060 */
3061 uint8_t mc33_hpfp_max_hold;
3062 /**
3063 * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
3064 offset 1560 bit 0 */
3065 bool stepperDcInvertedPins : 1 {};
3066 /**
3067 * Allow OpenBLT on Primary CAN
3068 offset 1560 bit 1 */
3069 bool canOpenBLT : 1 {};
3070 /**
3071 * Allow OpenBLT on Secondary CAN
3072 offset 1560 bit 2 */
3073 bool can2OpenBLT : 1 {};
3074 /**
3075 * Select whether to configure injector flow in volumetric flow (default, cc/min) or mass flow (g/s).
3076 offset 1560 bit 3 */
3077 bool injectorFlowAsMassFlow : 1 {};
3078 /**
3079 offset 1560 bit 4 */
3080 bool boardUseCanTerminator : 1 {};
3081 /**
3082 offset 1560 bit 5 */
3083 bool kLineDoHondaSend : 1 {};
3084 /**
3085 * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
3086 offset 1560 bit 6 */
3087 bool can1ListenMode : 1 {};
3088 /**
3089 offset 1560 bit 7 */
3090 bool can2ListenMode : 1 {};
3091 /**
3092 offset 1560 bit 8 */
3093 bool unusedBit_555_8 : 1 {};
3094 /**
3095 offset 1560 bit 9 */
3096 bool unusedBit_555_9 : 1 {};
3097 /**
3098 offset 1560 bit 10 */
3099 bool unusedBit_555_10 : 1 {};
3100 /**
3101 offset 1560 bit 11 */
3102 bool unusedBit_555_11 : 1 {};
3103 /**
3104 offset 1560 bit 12 */
3105 bool unusedBit_555_12 : 1 {};
3106 /**
3107 offset 1560 bit 13 */
3108 bool unusedBit_555_13 : 1 {};
3109 /**
3110 offset 1560 bit 14 */
3111 bool unusedBit_555_14 : 1 {};
3112 /**
3113 offset 1560 bit 15 */
3114 bool unusedBit_555_15 : 1 {};
3115 /**
3116 offset 1560 bit 16 */
3117 bool unusedBit_555_16 : 1 {};
3118 /**
3119 offset 1560 bit 17 */
3120 bool unusedBit_555_17 : 1 {};
3121 /**
3122 offset 1560 bit 18 */
3123 bool unusedBit_555_18 : 1 {};
3124 /**
3125 offset 1560 bit 19 */
3126 bool unusedBit_555_19 : 1 {};
3127 /**
3128 offset 1560 bit 20 */
3129 bool unusedBit_555_20 : 1 {};
3130 /**
3131 offset 1560 bit 21 */
3132 bool unusedBit_555_21 : 1 {};
3133 /**
3134 offset 1560 bit 22 */
3135 bool unusedBit_555_22 : 1 {};
3136 /**
3137 offset 1560 bit 23 */
3138 bool unusedBit_555_23 : 1 {};
3139 /**
3140 offset 1560 bit 24 */
3141 bool unusedBit_555_24 : 1 {};
3142 /**
3143 offset 1560 bit 25 */
3144 bool unusedBit_555_25 : 1 {};
3145 /**
3146 offset 1560 bit 26 */
3147 bool unusedBit_555_26 : 1 {};
3148 /**
3149 offset 1560 bit 27 */
3150 bool unusedBit_555_27 : 1 {};
3151 /**
3152 offset 1560 bit 28 */
3153 bool unusedBit_555_28 : 1 {};
3154 /**
3155 offset 1560 bit 29 */
3156 bool unusedBit_555_29 : 1 {};
3157 /**
3158 offset 1560 bit 30 */
3159 bool unusedBit_555_30 : 1 {};
3160 /**
3161 offset 1560 bit 31 */
3162 bool unusedBit_555_31 : 1 {};
3163 /**
3164 * offset 1564
3165 */
3166 uint8_t camDecoder2jzPosition;
3167 /**
3168 * offset 1565
3169 */
3171 /**
3172 * Duration of each test pulse
3173 * units: ms
3174 * offset 1566
3175 */
3176 scaled_channel<uint16_t, 100, 1> benchTestOnTime;
3177 /**
3178 * units: %
3179 * offset 1568
3180 */
3182 /**
3183 * units: %
3184 * offset 1569
3185 */
3186 scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
3187 /**
3188 * offset 1570
3189 */
3191 /**
3192 * need 4 byte alignment
3193 * units: units
3194 * offset 1571
3195 */
3196 uint8_t alignmentFill_at_1571[1] = {};
3197 /**
3198 * offset 1572
3199 */
3201 /**
3202 * offset 1574
3203 */
3205 /**
3206 * offset 1576
3207 */
3209 /**
3210 * offset 1577
3211 */
3213 /**
3214 * Override the Y axis (load) value used for the ignition table.
3215 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3216 * offset 1578
3217 */
3219 /**
3220 * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
3221 * offset 1579
3222 */
3224 /**
3225 * offset 1580
3226 */
3228 /**
3229 * offset 1582
3230 */
3232 /**
3233 * need 4 byte alignment
3234 * units: units
3235 * offset 1583
3236 */
3237 uint8_t alignmentFill_at_1583[1] = {};
3238 /**
3239 * MAP value above which fuel is cut in case of overboost.
3240 * Set to 0 to disable overboost cut.
3241 * units: kPa (absolute)
3242 * offset 1584
3243 */
3244 float boostCutPressure;
3245 /**
3246 * units: kg/h
3247 * offset 1588
3248 */
3249 scaled_channel<uint8_t, 1, 5> tchargeBins[16] = {};
3250 /**
3251 * units: ratio
3252 * offset 1604
3253 */
3254 scaled_channel<uint8_t, 100, 1> tchargeValues[16] = {};
3255 /**
3256 * Fixed timing, useful for TDC testing
3257 * units: deg
3258 * offset 1620
3259 */
3260 float fixedTiming;
3261 /**
3262 * MAP voltage for low point
3263 * units: v
3264 * offset 1624
3265 */
3266 float mapLowValueVoltage;
3267 /**
3268 * MAP voltage for low point
3269 * units: v
3270 * offset 1628
3271 */
3272 float mapHighValueVoltage;
3273 /**
3274 * EGO value correction
3275 * units: value
3276 * offset 1632
3277 */
3278 float egoValueShift;
3279 /**
3280 * VVT output solenoid pin for this cam
3281 * offset 1636
3282 */
3283 output_pin_e vvtPins[CAM_INPUTS_COUNT] = {};
3284 /**
3285 * This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling.
3286 * units: percent
3287 * offset 1644
3288 */
3290 /**
3291 * offset 1648
3292 */
3293 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMinTps;
3294 /**
3295 * offset 1649
3296 */
3297 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMaxTps;
3298 /**
3299 * offset 1650
3300 */
3301 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMinTps;
3302 /**
3303 * offset 1651
3304 */
3305 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMaxTps;
3306 /**
3307 * offset 1652
3308 */
3310 /**
3311 * 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.
3312 * units: deg BTDC
3313 * offset 1654
3314 */
3315 int8_t minimumIgnitionTiming;
3316 /**
3317 * 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
3318 * units: deg BTDC
3319 * offset 1655
3320 */
3321 int8_t maximumIgnitionTiming;
3322 /**
3323 * units: Hz
3324 * offset 1656
3325 */
3327 /**
3328 * set vvt_mode X
3329 * offset 1660
3330 */
3331 vvt_mode_e vvtMode[CAMS_PER_BANK] = {};
3332 /**
3333 * Additional idle % when fan #2 is active
3334 * units: %
3335 * offset 1662
3336 */
3337 uint8_t fan2ExtraIdle;
3338 /**
3339 * Delay to allow fuel pressure to build before firing the priming pulse.
3340 * units: sec
3341 * offset 1663
3342 */
3343 scaled_channel<uint8_t, 100, 1> primingDelay;
3344 /**
3345 * offset 1664
3346 */
3347 adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT] = {};
3348 /**
3349 * offset 1672
3350 */
3351 output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT] = {};
3352 /**
3353 * offset 1696
3354 */
3356 /**
3357 * offset 1697
3358 */
3360 /**
3361 * None = I have a MAP-referenced fuel pressure regulator
3362 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
3363 * Sensed rail pressure = I have a fuel pressure sensor
3364 * offset 1698
3365 */
3367 /**
3368 * offset 1699
3369 */
3371 /**
3372 * This is the pressure at which your injector flow is known.
3373 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
3374 * units: kPa
3375 * offset 1700
3376 */
3378 /**
3379 * offset 1704
3380 */
3382 /**
3383 * offset 1736
3384 */
3386 /**
3387 * units: Deg
3388 * offset 1768
3389 */
3390 int16_t knockSamplingDuration;
3391 /**
3392 * units: Hz
3393 * offset 1770
3394 */
3395 int16_t etbFreq;
3396 /**
3397 * offset 1772
3398 */
3400 /**
3401 * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
3402 * offset 1792
3403 */
3405 /**
3406 * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
3407 * units: %
3408 * offset 1793
3409 */
3410 uint8_t stepperMinDutyCycle;
3411 /**
3412 * Use to limit the max.current through the stepper motor (100% = no limit)
3413 * units: %
3414 * offset 1794
3415 */
3416 uint8_t stepperMaxDutyCycle;
3417 /**
3418 * offset 1795
3419 */
3421 /**
3422 * per-cylinder ignition and fueling timing correction for uneven engines
3423 * units: deg
3424 * offset 1796
3425 */
3426 angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT] = {};
3427 /**
3428 * units: seconds
3429 * offset 1844
3430 */
3432 /**
3433 * offset 1848
3434 */
3436 /**
3437 * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
3438 * offset 1849
3439 */
3441 /**
3442 * offset 1850
3443 */
3445 /**
3446 * offset 1851
3447 */
3449 /**
3450 * offset 1852
3451 */
3453 /**
3454 * offset 1853
3455 */
3457 /**
3458 * offset 1854
3459 */
3461 /**
3462 * offset 1855
3463 */
3465 /**
3466 * offset 1856
3467 */
3469 /**
3470 * offset 1857
3471 */
3473 /**
3474 * ResetB
3475 * offset 1858
3476 */
3478 /**
3479 * offset 1860
3480 */
3482 /**
3483 * Brake pedal switch
3484 * offset 1862
3485 */
3487 /**
3488 * VVT output PID
3489 * TODO: rename to vvtPid
3490 * offset 1864
3491 */
3492 pid_s auxPid[CAMS_PER_BANK] = {};
3493 /**
3494 * offset 1904
3495 */
3496 float injectorCorrectionPolynomial[8] = {};
3497 /**
3498 * units: C
3499 * offset 1936
3500 */
3501 int8_t primeBins[PRIME_CURVE_COUNT] = {};
3502 /**
3503 * offset 1944
3504 */
3506 /**
3507 * offset 1964
3508 */
3510 /**
3511 * need 4 byte alignment
3512 * units: units
3513 * offset 1965
3514 */
3515 uint8_t alignmentFill_at_1965[1] = {};
3516 /**
3517 * offset 1966
3518 */
3520 /**
3521 * Cooling fan turn-on temperature threshold, in Celsius
3522 * units: deg C
3523 * offset 1968
3524 */
3525 uint8_t fan2OnTemperature;
3526 /**
3527 * Cooling fan turn-off temperature threshold, in Celsius
3528 * units: deg C
3529 * offset 1969
3530 */
3531 uint8_t fan2OffTemperature;
3532 /**
3533 * offset 1970
3534 */
3536 /**
3537 * offset 1972
3538 */
3540 /**
3541 * offset 1974
3542 */
3544 /**
3545 * need 4 byte alignment
3546 * units: units
3547 * offset 1975
3548 */
3549 uint8_t alignmentFill_at_1975[1] = {};
3550 /**
3551 * offset 1976
3552 */
3554 /**
3555 * need 4 byte alignment
3556 * units: units
3557 * offset 1978
3558 */
3559 uint8_t alignmentFill_at_1978[2] = {};
3560 /**
3561 * units: hz
3562 * offset 1980
3563 */
3564 float auxFrequencyFilter;
3565 /**
3566 * offset 1984
3567 */
3568 sent_input_pin_e sentInputPins[SENT_INPUT_COUNT] = {};
3569 /**
3570 * This sets the RPM above which fuel cut is active.
3571 * units: rpm
3572 * offset 1986
3573 */
3574 int16_t coastingFuelCutRpmHigh;
3575 /**
3576 * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
3577 * units: rpm
3578 * offset 1988
3579 */
3580 int16_t coastingFuelCutRpmLow;
3581 /**
3582 * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
3583 * units: %
3584 * offset 1990
3585 */
3586 int16_t coastingFuelCutTps;
3587 /**
3588 * Fuel cutoff is disabled when the engine is cold.
3589 * units: C
3590 * offset 1992
3591 */
3592 int16_t coastingFuelCutClt;
3593 /**
3594 * Increases PID reaction for RPM<target by adding extra percent to PID-error
3595 * units: %
3596 * offset 1994
3597 */
3598 int16_t pidExtraForLowRpm;
3599 /**
3600 * MAP value above which fuel injection is re-enabled.
3601 * units: kPa
3602 * offset 1996
3603 */
3604 int16_t coastingFuelCutMap;
3605 /**
3606 * need 4 byte alignment
3607 * units: units
3608 * offset 1998
3609 */
3610 uint8_t alignmentFill_at_1998[2] = {};
3611 /**
3612 * offset 2000
3613 */
3615 /**
3616 * offset 2020
3617 */
3619 /**
3620 * offset 2040
3621 */
3622 gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT] = {};
3623 /**
3624 * offset 2136
3625 */
3626 gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT] = {};
3627 /**
3628 * offset 2200
3629 */
3630 gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT] = {};
3631 /**
3632 * Heat transfer coefficient at zero flow.
3633 * 0 means the air charge is fully heated to the same temperature as CLT.
3634 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3635 * offset 2328
3636 */
3637 float tChargeAirCoefMin;
3638 /**
3639 * Heat transfer coefficient at high flow, as defined by "max air flow".
3640 * 0 means the air charge is fully heated to the same temperature as CLT.
3641 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3642 * offset 2332
3643 */
3644 float tChargeAirCoefMax;
3645 /**
3646 * High flow point for heat transfer estimation.
3647 * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
3648 * units: kg/h
3649 * offset 2336
3650 */
3651 float tChargeAirFlowMax;
3652 /**
3653 * Maximum allowed rate of increase allowed for the estimated charge temperature
3654 * units: deg/sec
3655 * offset 2340
3656 */
3657 float tChargeAirIncrLimit;
3658 /**
3659 * Maximum allowed rate of decrease allowed for the estimated charge temperature
3660 * units: deg/sec
3661 * offset 2344
3662 */
3663 float tChargeAirDecrLimit;
3664 /**
3665 * offset 2348
3666 */
3667 float hip9011Gain;
3668 /**
3669 * iTerm min value
3670 * offset 2352
3671 */
3672 int16_t etb_iTermMin;
3673 /**
3674 * iTerm max value
3675 * offset 2354
3676 */
3677 int16_t etb_iTermMax;
3678 /**
3679 * See useIdleTimingPidControl
3680 * offset 2356
3681 */
3683 /**
3684 * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
3685 * offset 2376
3686 */
3688 /**
3689 * offset 2380
3690 */
3692 /**
3693 * offset 2381
3694 */
3696 /**
3697 * A delay in cycles between fuel-enrich. portions
3698 * units: cycles
3699 * offset 2382
3700 */
3701 int16_t tpsAccelFractionPeriod;
3702 /**
3703 * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
3704 * units: coef
3705 * offset 2384
3706 */
3708 /**
3709 * offset 2388
3710 */
3712 /**
3713 * offset 2389
3714 */
3716 /**
3717 * iTerm min value
3718 * offset 2390
3719 */
3720 int16_t idlerpmpid_iTermMin;
3721 /**
3722 * offset 2392
3723 */
3725 /**
3726 * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
3727 * E0 = 14.7
3728 * E10 = 14.1
3729 * E85 = 9.9
3730 * E100 = 9.0
3731 * units: :1
3732 * offset 2393
3733 */
3734 scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
3735 /**
3736 * iTerm max value
3737 * offset 2394
3738 */
3739 int16_t idlerpmpid_iTermMax;
3740 /**
3741 * This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.
3742 * units: %
3743 * offset 2396
3744 */
3746 /**
3747 * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
3748 * offset 2400
3749 */
3750 uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT] = {};
3751 /**
3752 * units: mg
3753 * offset 2412
3754 */
3755 scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT] = {};
3756 /**
3757 * Trigger comparator center point voltage
3758 * units: V
3759 * offset 2420
3760 */
3761 scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
3762 /**
3763 * Trigger comparator hysteresis voltage (Min)
3764 * units: V
3765 * offset 2421
3766 */
3767 scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
3768 /**
3769 * Trigger comparator hysteresis voltage (Max)
3770 * units: V
3771 * offset 2422
3772 */
3773 scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
3774 /**
3775 * VR-sensor saturation RPM
3776 * units: RPM
3777 * offset 2423
3778 */
3779 scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
3780 /**
3781 * units: ratio
3782 * offset 2424
3783 */
3784 scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE] = {};
3785 /**
3786 * units: RPM
3787 * offset 2436
3788 */
3789 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE] = {};
3790 /**
3791 * offset 2442
3792 */
3793 int8_t disableFan1AtSpeed;
3794 /**
3795 * offset 2443
3796 */
3797 int8_t disableFan2AtSpeed;
3798 /**
3799 * offset 2444
3800 */
3802 /**
3803 * need 4 byte alignment
3804 * units: units
3805 * offset 2446
3806 */
3807 uint8_t alignmentFill_at_2446[2] = {};
3808 /**
3809 * offset 2448
3810 */
3811 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
3812 /**
3813 * Boost Current
3814 * units: mA
3815 * offset 2880
3816 */
3817 uint16_t mc33_i_boost;
3818 /**
3819 * Peak Current
3820 * units: mA
3821 * offset 2882
3822 */
3823 uint16_t mc33_i_peak;
3824 /**
3825 * Hold Current
3826 * units: mA
3827 * offset 2884
3828 */
3829 uint16_t mc33_i_hold;
3830 /**
3831 * 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.
3832 * units: us
3833 * offset 2886
3834 */
3835 uint16_t mc33_t_max_boost;
3836 /**
3837 * units: us
3838 * offset 2888
3839 */
3840 uint16_t mc33_t_peak_off;
3841 /**
3842 * Peak phase duration
3843 * units: us
3844 * offset 2890
3845 */
3846 uint16_t mc33_t_peak_tot;
3847 /**
3848 * units: us
3849 * offset 2892
3850 */
3851 uint16_t mc33_t_bypass;
3852 /**
3853 * units: us
3854 * offset 2894
3855 */
3856 uint16_t mc33_t_hold_off;
3857 /**
3858 * Hold phase duration
3859 * units: us
3860 * offset 2896
3861 */
3862 uint16_t mc33_t_hold_tot;
3863 /**
3864 * offset 2898
3865 */
3867 /**
3868 * offset 2899
3869 */
3871 /**
3872 * offset 2900
3873 */
3875 /**
3876 * offset 2901
3877 */
3878 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
3879 /**
3880 * need 4 byte alignment
3881 * units: units
3882 * offset 2907
3883 */
3884 uint8_t alignmentFill_at_2907[1] = {};
3885 /**
3886 * units: ratio
3887 * offset 2908
3888 */
3889 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
3890 /**
3891 * units: ratio
3892 * offset 2980
3893 */
3894 float triggerGapOverrideTo[GAP_TRACKING_LENGTH] = {};
3895 /**
3896 * 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.
3897 * units: rpm
3898 * offset 3052
3899 */
3900 scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
3901 /**
3902 * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
3903 * units: sec
3904 * offset 3053
3905 */
3906 scaled_channel<uint8_t, 10, 1> dfcoDelay;
3907 /**
3908 * 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.
3909 * units: sec
3910 * offset 3054
3911 */
3912 scaled_channel<uint8_t, 10, 1> acDelay;
3913 /**
3914 * offset 3055
3915 */
3917 /**
3918 * units: mg
3919 * offset 3056
3920 */
3921 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
3922 /**
3923 * 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.
3924 * units: %
3925 * offset 3058
3926 */
3927 uint8_t etbJamDetectThreshold;
3928 /**
3929 * units: lobes/cam
3930 * offset 3059
3931 */
3932 uint8_t hpfpCamLobes;
3933 /**
3934 * offset 3060
3935 */
3937 /**
3938 * Low engine speed for A/C. Larger engines can survive lower values
3939 * units: RPM
3940 * offset 3061
3941 */
3942 scaled_channel<int8_t, 1, 10> acLowRpmLimit;
3943 /**
3944 * If the requested activation time is below this angle, don't bother running the pump
3945 * units: deg
3946 * offset 3062
3947 */
3948 uint8_t hpfpMinAngle;
3949 /**
3950 * need 4 byte alignment
3951 * units: units
3952 * offset 3063
3953 */
3954 uint8_t alignmentFill_at_3063[1] = {};
3955 /**
3956 * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
3957 * units: cc
3958 * offset 3064
3959 */
3960 scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
3961 /**
3962 * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
3963 * units: deg
3964 * offset 3066
3965 */
3966 uint8_t hpfpActivationAngle;
3967 /**
3968 * offset 3067
3969 */
3970 uint8_t issFilterReciprocal;
3971 /**
3972 * units: %/kPa
3973 * offset 3068
3974 */
3975 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
3976 /**
3977 * units: %/kPa/lobe
3978 * offset 3070
3979 */
3980 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
3981 /**
3982 * 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.
3983 * units: kPa/s
3984 * offset 3072
3985 */
3986 uint16_t hpfpTargetDecay;
3987 /**
3988 * offset 3074
3989 */
3991 /**
3992 * units: ratio
3993 * offset 3082
3994 */
3995 scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT] = {};
3996 /**
3997 * We need to give engine time to build oil pressure without diverting it to VVT
3998 * units: ms
3999 * offset 3102
4000 */
4001 uint16_t vvtActivationDelayMs;
4002 /**
4003 * units: Nm
4004 * offset 3104
4005 */
4006 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE] = {};
4007 /**
4008 * units: RPM
4009 * offset 3140
4010 */
4011 uint16_t torqueRpmBins[TORQUE_CURVE_SIZE] = {};
4012 /**
4013 * units: Load
4014 * offset 3152
4015 */
4016 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
4017 /**
4018 * offset 3164
4019 */
4021 /**
4022 * offset 3165
4023 */
4025 /**
4026 * During revolution where ACR should be disabled at what specific angle to disengage
4027 * units: deg
4028 * offset 3166
4029 */
4030 uint16_t acrDisablePhase;
4031 /**
4032 * offset 3168
4033 */
4035 /**
4036 * offset 3188
4037 */
4039 /**
4040 * offset 3208
4041 */
4043 /**
4044 * offset 3210
4045 */
4047 /**
4048 * need 4 byte alignment
4049 * units: units
4050 * offset 3211
4051 */
4052 uint8_t alignmentFill_at_3211[1] = {};
4053 /**
4054 * offset 3212
4055 */
4057 /**
4058 * offset 3214
4059 */
4061 /**
4062 * need 4 byte alignment
4063 * units: units
4064 * offset 3215
4065 */
4066 uint8_t alignmentFill_at_3215[1] = {};
4067 /**
4068 * offset 3216
4069 */
4071 /**
4072 * offset 3218
4073 */
4075 /**
4076 * offset 3220
4077 */
4079 /**
4080 * need 4 byte alignment
4081 * units: units
4082 * offset 3221
4083 */
4084 uint8_t alignmentFill_at_3221[1] = {};
4085 /**
4086 * offset 3222
4087 */
4089 /**
4090 * offset 3224
4091 */
4093 /**
4094 * offset 3226
4095 */
4097 /**
4098 * need 4 byte alignment
4099 * units: units
4100 * offset 3227
4101 */
4102 uint8_t alignmentFill_at_3227[1] = {};
4103 /**
4104 * offset 3228
4105 */
4107 /**
4108 * offset 3230
4109 */
4111 /**
4112 * Set a minimum allowed target position to avoid slamming/driving against the hard mechanical stop in the throttle.
4113 * units: %
4114 * offset 3232
4115 */
4116 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
4117 /**
4118 * need 4 byte alignment
4119 * units: units
4120 * offset 3233
4121 */
4122 uint8_t alignmentFill_at_3233[1] = {};
4123 /**
4124 * offset 3234
4125 */
4126 uint16_t tuneHidingKey;
4127 /**
4128 * Individual charaters are accessible using vin(index) Lua function
4129 * offset 3236
4130 */
4132 /**
4133 * need 4 byte alignment
4134 * units: units
4135 * offset 3253
4136 */
4137 uint8_t alignmentFill_at_3253[1] = {};
4138 /**
4139 * offset 3254
4140 */
4141 uint16_t highSpeedOffsets[HIGH_SPEED_COUNT] = {};
4142 /**
4143 * offset 3318
4144 */
4146 /**
4147 * need 4 byte alignment
4148 * units: units
4149 * offset 3319
4150 */
4151 uint8_t alignmentFill_at_3319[1] = {};
4152 /**
4153 * offset 3320
4154 */
4155 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
4156 /**
4157 * units: rpm
4158 * offset 3336
4159 */
4160 int16_t ALSMinRPM;
4161 /**
4162 * units: rpm
4163 * offset 3338
4164 */
4165 int16_t ALSMaxRPM;
4166 /**
4167 * units: sec
4168 * offset 3340
4169 */
4170 int16_t ALSMaxDuration;
4171 /**
4172 * units: C
4173 * offset 3342
4174 */
4175 int8_t ALSMinCLT;
4176 /**
4177 * units: C
4178 * offset 3343
4179 */
4180 int8_t ALSMaxCLT;
4181 /**
4182 * offset 3344
4183 */
4184 uint8_t alsMinTimeBetween;
4185 /**
4186 * offset 3345
4187 */
4188 uint8_t alsEtbPosition;
4189 /**
4190 * units: %
4191 * offset 3346
4192 */
4194 /**
4195 * If you have SENT TPS sensor please select type. For analog TPS leave None
4196 * offset 3347
4197 */
4199 /**
4200 * offset 3348
4201 */
4202 uint16_t customSentTpsMin;
4203 /**
4204 * need 4 byte alignment
4205 * units: units
4206 * offset 3350
4207 */
4208 uint8_t alignmentFill_at_3350[2] = {};
4209 /**
4210 * units: %
4211 * offset 3352
4212 */
4213 int ALSIdleAdd;
4214 /**
4215 * units: %
4216 * offset 3356
4217 */
4218 int ALSEtbAdd;
4219 /**
4220 * offset 3360
4221 */
4222 float ALSSkipRatio;
4223 /**
4224 * 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
4225 * units: kPa (absolute)
4226 * offset 3364
4227 */
4228 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
4229 /**
4230 * offset 3365
4231 */
4233 /**
4234 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4235 * units: %
4236 * offset 3366
4237 */
4238 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4239 /**
4240 * For Toyota ETCS-i, use ~69%
4241 * units: %
4242 * offset 3367
4243 */
4244 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4245 /**
4246 * offset 3368
4247 */
4248 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
4249 /**
4250 * offset 3376
4251 */
4252 uint16_t customSentTpsMax;
4253 /**
4254 * offset 3378
4255 */
4256 uint16_t kLineBaudRate;
4257 /**
4258 * offset 3380
4259 */
4261 /**
4262 * offset 3381
4263 */
4264 UiMode uiMode;
4265 /**
4266 * Crank angle ATDC of first lobe peak
4267 * units: deg
4268 * offset 3382
4269 */
4270 int16_t hpfpPeakPos;
4271 /**
4272 * units: us
4273 * offset 3384
4274 */
4275 int16_t kLinePeriodUs;
4276 /**
4277 * 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)
4278 * units: RPM
4279 * offset 3386
4280 */
4281 scaled_channel<uint8_t, 1, 10> rpmSoftLimitWindowSize;
4282 /**
4283 * Degrees of timing REMOVED from actual timing during soft RPM limit window
4284 * units: deg
4285 * offset 3387
4286 */
4287 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4288 /**
4289 * % of fuel ADDED during window
4290 * units: %
4291 * offset 3388
4292 */
4293 scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
4294 /**
4295 * 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
4296 * units: RPM
4297 * offset 3389
4298 */
4299 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4300 /**
4301 * Time between bench test pulses
4302 * units: ms
4303 * offset 3390
4304 */
4305 scaled_channel<uint16_t, 10, 1> benchTestOffTime;
4306 /**
4307 * Hysterisis: if hard cut is 240kpa, and boostCutPressureHyst is 20, when the ECU sees 240kpa, fuel/ign will cut, and stay cut until 240-20=220kpa is reached
4308 * units: kPa (absolute)
4309 * offset 3392
4310 */
4311 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4312 /**
4313 * Boost duty cycle modified by gear
4314 * units: %
4315 * offset 3393
4316 */
4317 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
4318 /**
4319 * need 4 byte alignment
4320 * units: units
4321 * offset 3403
4322 */
4323 uint8_t alignmentFill_at_3403[1] = {};
4324 /**
4325 * How many test bench pulses do you want
4326 * offset 3404
4327 */
4328 uint32_t benchTestCount;
4329 /**
4330 * How long initial IAC adder is held before starting to decay.
4331 * units: seconds
4332 * offset 3408
4333 */
4334 scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
4335 /**
4336 * How long it takes to remove initial IAC adder to return to normal idle.
4337 * units: seconds
4338 * offset 3409
4339 */
4340 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4341 /**
4342 * offset 3410
4343 */
4344 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
4345 /**
4346 * offset 3422
4347 */
4348 pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT] = {};
4349 /**
4350 * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
4351 * units: ratio
4352 * offset 3428
4353 */
4354 scaled_channel<uint16_t, 10000, 1> canVssScaling;
4355 /**
4356 * need 4 byte alignment
4357 * units: units
4358 * offset 3430
4359 */
4360 uint8_t alignmentFill_at_3430[2] = {};
4361 /**
4362 * offset 3432
4363 */
4365 /**
4366 * offset 3464
4367 */
4369 /**
4370 * offset 3496
4371 */
4373 /**
4374 * offset 3528
4375 */
4377 /**
4378 * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
4379 * offset 3560
4380 */
4382 /**
4383 * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
4384 * offset 3561
4385 */
4387 /**
4388 * offset 3562
4389 */
4390 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
4391 /**
4392 * offset 3566
4393 */
4395 /**
4396 * Number of speedometer pulses per kilometer travelled.
4397 * offset 3568
4398 */
4399 uint16_t speedometerPulsePerKm;
4400 /**
4401 * offset 3570
4402 */
4403 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
4404 /**
4405 * offset 3574
4406 */
4408 /**
4409 * offset 3575
4410 */
4412 /**
4413 * units: ratio
4414 * offset 3576
4415 */
4416 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
4417 /**
4418 * units: ratio
4419 * offset 3592
4420 */
4421 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
4422 /**
4423 * units: %
4424 * offset 3608
4425 */
4426 int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4427 /**
4428 * If injector duty cycle hits this value, instantly cut fuel.
4429 * units: %
4430 * offset 3644
4431 */
4432 uint8_t maxInjectorDutyInstant;
4433 /**
4434 * If injector duty cycle hits this value for the specified delay time, cut fuel.
4435 * units: %
4436 * offset 3645
4437 */
4439 /**
4440 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
4441 * units: sec
4442 * offset 3646
4443 */
4444 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
4445 /**
4446 * need 4 byte alignment
4447 * units: units
4448 * offset 3647
4449 */
4450 uint8_t alignmentFill_at_3647[1] = {};
4451 /**
4452 * offset 3648
4453 */
4454 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
4455 /**
4456 * units: Deg
4457 * offset 3672
4458 */
4459 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4460 /**
4461 * units: %
4462 * offset 3708
4463 */
4464 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4465 /**
4466 * offset 3744
4467 */
4468 float auxSpeed1Multiplier;
4469 /**
4470 * offset 3748
4471 */
4473 /**
4474 * offset 3752
4475 */
4477 /**
4478 * offset 3754
4479 */
4481 /**
4482 * offset 3756
4483 */
4485 /**
4486 * offset 3758
4487 */
4489 /**
4490 * offset 3760
4491 */
4493 /**
4494 * offset 3762
4495 */
4497 /**
4498 * offset 3764
4499 */
4501 /**
4502 * offset 3766
4503 */
4505 /**
4506 * offset 3768
4507 */
4509 /**
4510 * offset 3770
4511 */
4513 /**
4514 * offset 3771
4515 */
4517 /**
4518 * offset 3772
4519 */
4521 /**
4522 * offset 3773
4523 */
4525 /**
4526 * offset 3774
4527 */
4529 /**
4530 * offset 3775
4531 */
4533 /**
4534 * offset 3776
4535 */
4537 /**
4538 * offset 3777
4539 */
4541 /**
4542 * need 4 byte alignment
4543 * units: units
4544 * offset 3778
4545 */
4546 uint8_t alignmentFill_at_3778[2] = {};
4547 /**
4548 * Secondary TTL channel baud rate
4549 * units: BPs
4550 * offset 3780
4551 */
4552 uint32_t tunerStudioSerialSpeed;
4553 /**
4554 * offset 3784
4555 */
4557 /**
4558 * offset 3786
4559 */
4561 /**
4562 * need 4 byte alignment
4563 * units: units
4564 * offset 3787
4565 */
4566 uint8_t alignmentFill_at_3787[1] = {};
4567 /**
4568 * offset 3788
4569 */
4570 int anotherCiTest;
4571 /**
4572 * offset 3792
4573 */
4574 uint32_t device_uid[3] = {};
4575 /**
4576 * offset 3804
4577 */
4578 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
4579 /**
4580 * need 4 byte alignment
4581 * units: units
4582 * offset 3810
4583 */
4584 uint8_t alignmentFill_at_3810[2] = {};
4585 /**
4586 * units: Ohm
4587 * offset 3812
4588 */
4590 /**
4591 * offset 3816
4592 */
4594 /**
4595 * Nominal coil charge current, 0.25A step
4596 * units: A
4597 * offset 3820
4598 */
4599 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
4600 /**
4601 * Maximum coil charge current, 1A step
4602 * units: A
4603 * offset 3821
4604 */
4605 uint8_t mc33810Maxi;
4606 /**
4607 * need 4 byte alignment
4608 * units: units
4609 * offset 3822
4610 */
4611 uint8_t alignmentFill_at_3822[2] = {};
4612 /**
4613 * offset 3824
4614 */
4616 /**
4617 * value of A/C pressure in kPa before that compressor is disengaged
4618 * units: kPa
4619 * offset 3844
4620 */
4621 uint16_t minAcPressure;
4622 /**
4623 * value of A/C pressure in kPa after that compressor is disengaged
4624 * units: kPa
4625 * offset 3846
4626 */
4627 uint16_t maxAcPressure;
4628 /**
4629 * Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise.
4630 * units: sec
4631 * offset 3848
4632 */
4633 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
4634 /**
4635 * need 4 byte alignment
4636 * units: units
4637 * offset 3849
4638 */
4639 uint8_t alignmentFill_at_3849[3] = {};
4640 /**
4641 * offset 3852
4642 */
4644 /**
4645 * offset 3872
4646 */
4648 /**
4649 * Below TPS value all knock suppression will be disabled.
4650 * units: %
4651 * offset 3892
4652 */
4653 scaled_channel<uint8_t, 1, 1> knockSuppressMinTps;
4654 /**
4655 * Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
4656 * units: %
4657 * offset 3893
4658 */
4659 scaled_channel<uint8_t, 10, 1> knockFuelTrimAggression;
4660 /**
4661 * After a knock event, reapply fuel at this rate.
4662 * units: 1%/s
4663 * offset 3894
4664 */
4665 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
4666 /**
4667 * Fuel trim when knock, max 30%
4668 * units: %
4669 * offset 3895
4670 */
4671 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
4672 /**
4673 * units: sense
4674 * offset 3896
4675 */
4677 /**
4678 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
4679 * units: Hz
4680 * offset 3900
4681 */
4682 float knockFrequency;
4683 /**
4684 * None = I have a MAP-referenced fuel pressure regulator
4685 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
4686 * Sensed rail pressure = I have a fuel pressure sensor
4687 * offset 3904
4688 */
4690 /**
4691 * need 4 byte alignment
4692 * units: units
4693 * offset 3905
4694 */
4695 uint8_t alignmentFill_at_3905[3] = {};
4696 /**
4697 * This is the pressure at which your injector flow is known.
4698 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
4699 * units: kPa
4700 * offset 3908
4701 */
4703 /**
4704 * SENT input connected to ETB
4705 * offset 3912
4706 */
4708 /**
4709 * SENT input used for high pressure fuel sensor
4710 * offset 3913
4711 */
4713 /**
4714 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
4715 * offset 3914
4716 */
4718 /**
4719 * need 4 byte alignment
4720 * units: units
4721 * offset 3915
4722 */
4723 uint8_t alignmentFill_at_3915[1] = {};
4724 /**
4725 offset 3916 bit 0 */
4726 bool nitrousControlEnabled : 1 {};
4727 /**
4728 offset 3916 bit 1 */
4730 /**
4731 offset 3916 bit 2 */
4732 bool unusedFancy3 : 1 {};
4733 /**
4734 offset 3916 bit 3 */
4735 bool unusedFancy4 : 1 {};
4736 /**
4737 offset 3916 bit 4 */
4738 bool unusedFancy5 : 1 {};
4739 /**
4740 offset 3916 bit 5 */
4741 bool unusedFancy6 : 1 {};
4742 /**
4743 offset 3916 bit 6 */
4744 bool unusedFancy7 : 1 {};
4745 /**
4746 offset 3916 bit 7 */
4747 bool unusedFancy8 : 1 {};
4748 /**
4749 offset 3916 bit 8 */
4750 bool unusedFancy9 : 1 {};
4751 /**
4752 offset 3916 bit 9 */
4753 bool unusedFancy10 : 1 {};
4754 /**
4755 offset 3916 bit 10 */
4756 bool unusedFancy11 : 1 {};
4757 /**
4758 offset 3916 bit 11 */
4759 bool unusedFancy12 : 1 {};
4760 /**
4761 offset 3916 bit 12 */
4762 bool unusedFancy13 : 1 {};
4763 /**
4764 offset 3916 bit 13 */
4765 bool unusedFancy14 : 1 {};
4766 /**
4767 offset 3916 bit 14 */
4768 bool unusedFancy15 : 1 {};
4769 /**
4770 offset 3916 bit 15 */
4771 bool unusedFancy16 : 1 {};
4772 /**
4773 offset 3916 bit 16 */
4774 bool unusedFancy17 : 1 {};
4775 /**
4776 offset 3916 bit 17 */
4777 bool unusedFancy18 : 1 {};
4778 /**
4779 offset 3916 bit 18 */
4780 bool unusedFancy19 : 1 {};
4781 /**
4782 offset 3916 bit 19 */
4783 bool unusedFancy20 : 1 {};
4784 /**
4785 offset 3916 bit 20 */
4786 bool unusedFancy21 : 1 {};
4787 /**
4788 offset 3916 bit 21 */
4789 bool unusedFancy22 : 1 {};
4790 /**
4791 offset 3916 bit 22 */
4792 bool unusedFancy23 : 1 {};
4793 /**
4794 offset 3916 bit 23 */
4795 bool unusedFancy24 : 1 {};
4796 /**
4797 offset 3916 bit 24 */
4798 bool unusedFancy25 : 1 {};
4799 /**
4800 offset 3916 bit 25 */
4801 bool unusedFancy26 : 1 {};
4802 /**
4803 offset 3916 bit 26 */
4804 bool unusedFancy27 : 1 {};
4805 /**
4806 offset 3916 bit 27 */
4807 bool unusedFancy28 : 1 {};
4808 /**
4809 offset 3916 bit 28 */
4810 bool unusedFancy29 : 1 {};
4811 /**
4812 offset 3916 bit 29 */
4813 bool unusedFancy30 : 1 {};
4814 /**
4815 offset 3916 bit 30 */
4816 bool unusedFancy31 : 1 {};
4817 /**
4818 offset 3916 bit 31 */
4819 bool unusedFancy32 : 1 {};
4820 /**
4821 * offset 3920
4822 */
4824 /**
4825 * need 4 byte alignment
4826 * units: units
4827 * offset 3921
4828 */
4829 uint8_t alignmentFill_at_3921[1] = {};
4830 /**
4831 * Pin that activates nitrous control
4832 * offset 3922
4833 */
4835 /**
4836 * offset 3924
4837 */
4839 /**
4840 * offset 3925
4841 */
4843 /**
4844 * offset 3926
4845 */
4847 /**
4848 * need 4 byte alignment
4849 * units: units
4850 * offset 3927
4851 */
4852 uint8_t alignmentFill_at_3927[1] = {};
4853 /**
4854 * offset 3928
4855 */
4857 /**
4858 * offset 3932
4859 */
4861 /**
4862 * units: deg C
4863 * offset 3936
4864 */
4865 uint8_t nitrousMinimumClt;
4866 /**
4867 * need 4 byte alignment
4868 * units: units
4869 * offset 3937
4870 */
4871 uint8_t alignmentFill_at_3937[1] = {};
4872 /**
4873 * units: kPa
4874 * offset 3938
4875 */
4876 int16_t nitrousMaximumMap;
4877 /**
4878 * units: afr
4879 * offset 3940
4880 */
4881 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
4882 /**
4883 * need 4 byte alignment
4884 * units: units
4885 * offset 3941
4886 */
4887 uint8_t alignmentFill_at_3941[1] = {};
4888 /**
4889 * units: rpm
4890 * offset 3942
4891 */
4892 uint16_t nitrousActivationRpm;
4893 /**
4894 * units: rpm
4895 * offset 3944
4896 */
4897 uint16_t nitrousDeactivationRpm;
4898 /**
4899 * units: rpm
4900 * offset 3946
4901 */
4903 /**
4904 * 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.
4905 * units: deg
4906 * offset 3948
4907 */
4908 uint8_t dfcoRetardDeg;
4909 /**
4910 * Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
4911 * units: s
4912 * offset 3949
4913 */
4914 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
4915 /**
4916 * offset 3950
4917 */
4919 /**
4920 * offset 3952
4921 */
4923 /**
4924 * units: %
4925 * offset 3953
4926 */
4928 /**
4929 * need 4 byte alignment
4930 * units: units
4931 * offset 3954
4932 */
4933 uint8_t alignmentFill_at_3954[2] = {};
4934 /**
4935 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
4936 * units: deg
4937 * offset 3956
4938 */
4940 /**
4941 * units: Kph
4942 * offset 3960
4943 */
4945 /**
4946 * need 4 byte alignment
4947 * units: units
4948 * offset 3962
4949 */
4950 uint8_t alignmentFill_at_3962[2] = {};
4951 /**
4952 * Exponential Average Alpha filtering parameter
4953 * offset 3964
4954 */
4956 /**
4957 * How often do we update fuel level gauge
4958 * units: seconds
4959 * offset 3968
4960 */
4962 /**
4963 * Error below specified value
4964 * units: v
4965 * offset 3972
4966 */
4968 /**
4969 * Error above specified value
4970 * units: v
4971 * offset 3976
4972 */
4974 /**
4975 * units: units
4976 * offset 3980
4977 */
4978 uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING] = {};
4979 /**
4980 * need 4 byte alignment
4981 * units: units
4982 * offset 4038
4983 */
4984 uint8_t alignmentFill_at_4038[2] = {};
4985};
4986static_assert(sizeof(engine_configuration_s) == 4040);
4987
4988// start of ign_cyl_trim_s
4989struct ign_cyl_trim_s {
4990 /**
4991 * offset 0
4992 */
4993 scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE] = {};
4994};
4995static_assert(sizeof(ign_cyl_trim_s) == 16);
4996
4997// start of fuel_cyl_trim_s
4998struct fuel_cyl_trim_s {
4999 /**
5000 * offset 0
5001 */
5002 scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE] = {};
5003};
5004static_assert(sizeof(fuel_cyl_trim_s) == 16);
5005
5006// start of blend_table_s
5007struct blend_table_s {
5008 /**
5009 * offset 0
5010 */
5011 scaled_channel<int16_t, 10, 1> table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT] = {};
5012 /**
5013 * units: Load
5014 * offset 128
5015 */
5016 uint16_t loadBins[BLEND_TABLE_COUNT] = {};
5017 /**
5018 * units: RPM
5019 * offset 144
5020 */
5021 uint16_t rpmBins[BLEND_TABLE_COUNT] = {};
5022 /**
5023 * offset 160
5024 */
5026 /**
5027 * offset 161
5028 */
5030 /**
5031 * offset 162
5032 */
5033 scaled_channel<int16_t, 10, 1> blendBins[8] = {};
5034 /**
5035 * units: %
5036 * offset 178
5037 */
5038 scaled_channel<uint8_t, 2, 1> blendValues[8] = {};
5039 /**
5040 * need 4 byte alignment
5041 * units: units
5042 * offset 186
5043 */
5044 uint8_t alignmentFill_at_186[2] = {};
5045};
5046static_assert(sizeof(blend_table_s) == 188);
5047
5048// start of persistent_config_s
5049struct persistent_config_s {
5050 /**
5051 * offset 0
5052 */
5054 /**
5055 * units: mult
5056 * offset 4040
5057 */
5058 float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT] = {};
5059 /**
5060 * units: count
5061 * offset 4184
5062 */
5063 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
5064 /**
5065 * units: C
5066 * offset 4196
5067 */
5068 int16_t postCrankingCLTBins[CRANKING_ENRICH_COUNT] = {};
5069 /**
5070 * target TPS value, 0 to 100%
5071 * TODO: use int8 data date once we template interpolation method
5072 * units: target TPS position
5073 * offset 4208
5074 */
5075 float etbBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
5076 /**
5077 * PWM bias, open loop component of PID closed loop control
5078 * units: ETB duty cycle bias
5079 * offset 4240
5080 */
5081 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5082 /**
5083 * units: %
5084 * offset 4272
5085 */
5086 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
5087 /**
5088 * units: Load
5089 * offset 4336
5090 */
5091 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
5092 /**
5093 * units: RPM
5094 * offset 4344
5095 */
5096 scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_SIZE] = {};
5097 /**
5098 * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
5099 * units: RPM
5100 * offset 4352
5101 */
5102 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
5103 /**
5104 * units: ms
5105 * offset 4368
5106 */
5107 scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE] = {};
5108 /**
5109 * CLT-based target RPM for automatic idle controller
5110 * units: C
5111 * offset 4384
5112 */
5113 scaled_channel<int8_t, 1, 2> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
5114 /**
5115 * See idleRpmPid
5116 * units: RPM
5117 * offset 4400
5118 */
5119 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
5120 /**
5121 * CLT-based timing correction
5122 * units: C
5123 * offset 4416
5124 */
5125 float cltTimingBins[CLT_TIMING_CURVE_SIZE] = {};
5126 /**
5127 * units: degree
5128 * offset 4448
5129 */
5130 float cltTimingExtra[CLT_TIMING_CURVE_SIZE] = {};
5131 /**
5132 * units: x
5133 * offset 4480
5134 */
5135 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
5136 /**
5137 * units: y
5138 * offset 4544
5139 */
5140 float scriptCurve1[SCRIPT_CURVE_16] = {};
5141 /**
5142 * units: x
5143 * offset 4608
5144 */
5145 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
5146 /**
5147 * units: y
5148 * offset 4672
5149 */
5150 float scriptCurve2[SCRIPT_CURVE_16] = {};
5151 /**
5152 * units: x
5153 * offset 4736
5154 */
5155 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
5156 /**
5157 * units: y
5158 * offset 4768
5159 */
5160 float scriptCurve3[SCRIPT_CURVE_8] = {};
5161 /**
5162 * units: x
5163 * offset 4800
5164 */
5165 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
5166 /**
5167 * units: y
5168 * offset 4832
5169 */
5170 float scriptCurve4[SCRIPT_CURVE_8] = {};
5171 /**
5172 * units: x
5173 * offset 4864
5174 */
5175 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
5176 /**
5177 * units: y
5178 * offset 4896
5179 */
5180 float scriptCurve5[SCRIPT_CURVE_8] = {};
5181 /**
5182 * units: x
5183 * offset 4928
5184 */
5185 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
5186 /**
5187 * units: y
5188 * offset 4960
5189 */
5190 float scriptCurve6[SCRIPT_CURVE_8] = {};
5191 /**
5192 * units: kPa
5193 * offset 4992
5194 */
5195 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
5196 /**
5197 * units: RPM
5198 * offset 5008
5199 */
5200 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
5201 /**
5202 * units: ratio
5203 * offset 5024
5204 */
5205 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
5206 /**
5207 * Cranking fuel correction coefficient based on TPS
5208 * units: Ratio
5209 * offset 5088
5210 */
5211 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
5212 /**
5213 * units: %
5214 * offset 5120
5215 */
5216 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
5217 /**
5218 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5219 * units: RPM
5220 * offset 5152
5221 */
5222 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
5223 /**
5224 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5225 * units: deg
5226 * offset 5160
5227 */
5228 scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE] = {};
5229 /**
5230 * RPM-based idle position for coasting
5231 * units: RPM
5232 * offset 5168
5233 */
5234 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
5235 /**
5236 * RPM-based idle position for coasting
5237 * units: %
5238 * offset 5184
5239 */
5240 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
5241 /**
5242 * offset 5200
5243 */
5244 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5245 /**
5246 * units: RPM
5247 * offset 5264
5248 */
5249 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
5250 /**
5251 * offset 5272
5252 */
5253 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5254 /**
5255 * offset 5336
5256 */
5257 uint16_t boostLoadBins[BOOST_LOAD_COUNT] = {};
5258 /**
5259 * units: %
5260 * offset 5352
5261 */
5262 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE] = {};
5263 /**
5264 * units: %
5265 * offset 5416
5266 */
5267 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
5268 /**
5269 * units: RPM
5270 * offset 5424
5271 */
5272 scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE] = {};
5273 /**
5274 * CLT-based cranking position multiplier for simple manual idle controller
5275 * units: C
5276 * offset 5432
5277 */
5278 float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE] = {};
5279 /**
5280 * CLT-based cranking position multiplier for simple manual idle controller
5281 * units: %
5282 * offset 5464
5283 */
5284 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
5285 /**
5286 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5287 * units: RPM
5288 * offset 5496
5289 */
5290 scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE] = {};
5291 /**
5292 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5293 * units: deg
5294 * offset 5504
5295 */
5296 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
5297 /**
5298 * units: RPM
5299 * offset 5536
5300 */
5301 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE] = {};
5302 /**
5303 * units: load
5304 * offset 5540
5305 */
5306 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
5307 /**
5308 * units: %
5309 * offset 5544
5310 */
5311 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE] = {};
5312 /**
5313 * offset 5576
5314 */
5316 /**
5317 * units: C
5318 * offset 13576
5319 */
5320 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
5321 /**
5322 * units: ratio
5323 * offset 13640
5324 */
5325 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
5326 /**
5327 * units: C
5328 * offset 13704
5329 */
5330 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
5331 /**
5332 * units: ratio
5333 * offset 13768
5334 */
5335 float iatFuelCorr[IAT_CURVE_SIZE] = {};
5336 /**
5337 * units: ratio
5338 * offset 13832
5339 */
5340 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
5341 /**
5342 * units: C
5343 * offset 13864
5344 */
5345 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
5346 /**
5347 * units: counter
5348 * offset 13896
5349 */
5350 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
5351 /**
5352 * units: C
5353 * offset 13928
5354 */
5355 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
5356 /**
5357 * units: mult
5358 * offset 13936
5359 */
5360 float crankingCycleFuelCoef[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
5361 /**
5362 * CLT-based idle position multiplier for simple manual idle controller
5363 * units: C
5364 * offset 14064
5365 */
5366 float cltIdleCorrBins[CLT_CURVE_SIZE] = {};
5367 /**
5368 * CLT-based idle position multiplier for simple manual idle controller
5369 * units: ratio
5370 * offset 14128
5371 */
5372 float cltIdleCorr[CLT_CURVE_SIZE] = {};
5373 /**
5374 * Also known as MAF transfer function.
5375 * kg/hour value.
5376 * By the way 2.081989116 kg/h = 1 ft3/m
5377 * units: kg/hour
5378 * offset 14192
5379 */
5380 float mafDecoding[MAF_DECODING_COUNT] = {};
5381 /**
5382 * units: V
5383 * offset 14320
5384 */
5385 float mafDecodingBins[MAF_DECODING_COUNT] = {};
5386 /**
5387 * units: deg
5388 * offset 14448
5389 */
5390 scaled_channel<int8_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_COUNT][IAT_IGN_CORR_COUNT] = {};
5391 /**
5392 * units: C
5393 * offset 14512
5394 */
5395 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_COUNT] = {};
5396 /**
5397 * units: Load
5398 * offset 14520
5399 */
5400 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_COUNT] = {};
5401 /**
5402 * units: deg
5403 * offset 14528
5404 */
5405 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
5406 /**
5407 * units: Load
5408 * offset 15040
5409 */
5410 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
5411 /**
5412 * units: RPM
5413 * offset 15072
5414 */
5415 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
5416 /**
5417 * units: onoff
5418 * offset 15104
5419 */
5420 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
5421 /**
5422 * units: kPa
5423 * offset 15164
5424 */
5425 scaled_channel<uint16_t, 100, 1> mapEstimateTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
5426 /**
5427 * units: % TPS
5428 * offset 15676
5429 */
5430 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[FUEL_LOAD_COUNT] = {};
5431 /**
5432 * units: RPM
5433 * offset 15708
5434 */
5435 uint16_t mapEstimateRpmBins[FUEL_RPM_COUNT] = {};
5436 /**
5437 * units: value
5438 * offset 15740
5439 */
5440 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5441 /**
5442 * units: L
5443 * offset 15804
5444 */
5445 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
5446 /**
5447 * units: RPM
5448 * offset 15820
5449 */
5450 uint16_t vvtTable1RpmBins[VVT_TABLE_SIZE] = {};
5451 /**
5452 * units: value
5453 * offset 15836
5454 */
5455 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5456 /**
5457 * units: L
5458 * offset 15900
5459 */
5460 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
5461 /**
5462 * units: RPM
5463 * offset 15916
5464 */
5465 uint16_t vvtTable2RpmBins[VVT_TABLE_SIZE] = {};
5466 /**
5467 * units: deg
5468 * offset 15932
5469 */
5470 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
5471 /**
5472 * units: Load
5473 * offset 16444
5474 */
5475 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
5476 /**
5477 * units: RPM
5478 * offset 16476
5479 */
5480 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
5481 /**
5482 * units: %
5483 * offset 16508
5484 */
5485 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
5486 /**
5487 * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
5488 * offset 17020
5489 */
5490 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
5491 /**
5492 * units: RPM
5493 * offset 17052
5494 */
5495 uint16_t veRpmBins[VE_RPM_COUNT] = {};
5496 /**
5497 * units: lambda
5498 * offset 17084
5499 */
5500 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
5501 /**
5502 * offset 17340
5503 */
5504 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
5505 /**
5506 * units: RPM
5507 * offset 17372
5508 */
5509 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
5510 /**
5511 * units: value
5512 * offset 17404
5513 */
5514 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
5515 /**
5516 * units: from
5517 * offset 17660
5518 */
5519 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
5520 /**
5521 * units: to
5522 * offset 17692
5523 */
5524 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
5525 /**
5526 * units: value
5527 * offset 17724
5528 */
5529 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
5530 /**
5531 * units: L
5532 * offset 17980
5533 */
5534 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
5535 /**
5536 * units: RPM
5537 * offset 17996
5538 */
5539 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
5540 /**
5541 * units: value
5542 * offset 18012
5543 */
5544 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
5545 /**
5546 * units: L
5547 * offset 18268
5548 */
5549 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
5550 /**
5551 * units: RPM
5552 * offset 18284
5553 */
5554 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
5555 /**
5556 * units: value
5557 * offset 18300
5558 */
5559 uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
5560 /**
5561 * units: L
5562 * offset 18364
5563 */
5564 int16_t scriptTable3LoadBins[SCRIPT_TABLE_8] = {};
5565 /**
5566 * units: RPM
5567 * offset 18380
5568 */
5569 int16_t scriptTable3RpmBins[SCRIPT_TABLE_8] = {};
5570 /**
5571 * units: value
5572 * offset 18396
5573 */
5574 uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM] = {};
5575 /**
5576 * units: L
5577 * offset 18476
5578 */
5579 int16_t scriptTable4LoadBins[SCRIPT_TABLE_8] = {};
5580 /**
5581 * units: RPM
5582 * offset 18492
5583 */
5584 int16_t scriptTable4RpmBins[TABLE_4_RPM] = {};
5585 /**
5586 * offset 18512
5587 */
5588 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
5589 /**
5590 * units: rpm
5591 * offset 18520
5592 */
5593 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
5594 /**
5595 * offset 18528
5596 */
5597 ign_cyl_trim_s ignTrims[12] = {};
5598 /**
5599 * offset 18720
5600 */
5601 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
5602 /**
5603 * units: rpm
5604 * offset 18728
5605 */
5606 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
5607 /**
5608 * offset 18736
5609 */
5610 fuel_cyl_trim_s fuelTrims[12] = {};
5611 /**
5612 * units: ratio
5613 * offset 18928
5614 */
5615 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
5616 /**
5617 * units: Airmass
5618 * offset 18944
5619 */
5620 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
5621 /**
5622 * units: %
5623 * offset 18952
5624 */
5625 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
5626 /**
5627 * units: %
5628 * offset 18960
5629 */
5630 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
5631 /**
5632 * units: %
5633 * offset 18968
5634 */
5635 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
5636 /**
5637 * units: %
5638 * offset 18976
5639 */
5640 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
5641 /**
5642 * units: %
5643 * offset 18984
5644 */
5645 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
5646 /**
5647 * units: %
5648 * offset 18992
5649 */
5650 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
5651 /**
5652 * units: %
5653 * offset 19000
5654 */
5655 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
5656 /**
5657 * units: %
5658 * offset 19008
5659 */
5660 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
5661 /**
5662 * units: %
5663 * offset 19016
5664 */
5665 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
5666 /**
5667 * units: %
5668 * offset 19024
5669 */
5670 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
5671 /**
5672 * units: %
5673 * offset 19032
5674 */
5675 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
5676 /**
5677 * units: %
5678 * offset 19040
5679 */
5680 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
5681 /**
5682 * units: TPS
5683 * offset 19048
5684 */
5685 uint8_t tcu_tccTpsBins[8] = {};
5686 /**
5687 * units: MPH
5688 * offset 19056
5689 */
5690 uint8_t tcu_tccLockSpeed[8] = {};
5691 /**
5692 * units: MPH
5693 * offset 19064
5694 */
5695 uint8_t tcu_tccUnlockSpeed[8] = {};
5696 /**
5697 * units: KPH
5698 * offset 19072
5699 */
5700 uint8_t tcu_32SpeedBins[8] = {};
5701 /**
5702 * units: %
5703 * offset 19080
5704 */
5705 uint8_t tcu_32Vals[8] = {};
5706 /**
5707 * units: %
5708 * offset 19088
5709 */
5710 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE] = {};
5711 /**
5712 * units: %
5713 * offset 19124
5714 */
5715 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
5716 /**
5717 * units: RPM
5718 * offset 19130
5719 */
5720 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_SIZE] = {};
5721 /**
5722 * units: deg
5723 * offset 19136
5724 */
5725 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE] = {};
5726 /**
5727 * units: %
5728 * offset 19172
5729 */
5730 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
5731 /**
5732 * units: RPM
5733 * offset 19178
5734 */
5735 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_SIZE] = {};
5736 /**
5737 * units: deg
5738 * offset 19184
5739 */
5740 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[4][4] = {};
5741 /**
5742 * units: TPS
5743 * offset 19216
5744 */
5745 uint16_t alsIgnRetardLoadBins[4] = {};
5746 /**
5747 * units: RPM
5748 * offset 19224
5749 */
5750 uint16_t alsIgnRetardrpmBins[4] = {};
5751 /**
5752 * units: percent
5753 * offset 19232
5754 */
5755 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[4][4] = {};
5756 /**
5757 * units: TPS
5758 * offset 19264
5759 */
5760 uint16_t alsFuelAdjustmentLoadBins[4] = {};
5761 /**
5762 * units: RPM
5763 * offset 19272
5764 */
5765 uint16_t alsFuelAdjustmentrpmBins[4] = {};
5766 /**
5767 * units: ratio
5768 * offset 19280
5769 */
5770 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[4][4] = {};
5771 /**
5772 * units: TPS
5773 * offset 19312
5774 */
5775 uint16_t alsIgnSkipLoadBins[4] = {};
5776 /**
5777 * units: RPM
5778 * offset 19320
5779 */
5780 uint16_t alsIgnSkiprpmBins[4] = {};
5781 /**
5782 * offset 19328
5783 */
5784 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
5785 /**
5786 * offset 20080
5787 */
5788 blend_table_s veBlends[VE_BLEND_COUNT] = {};
5789 /**
5790 * units: %
5791 * offset 20832
5792 */
5793 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[12] = {};
5794 /**
5795 * In units of g/s normalized to choked flow conditions
5796 * units: g/s
5797 * offset 20856
5798 */
5799 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[12] = {};
5800 /**
5801 * offset 20880
5802 */
5803 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
5804 /**
5805 * offset 21256
5806 */
5807 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
5808 /**
5809 * units: level
5810 * offset 21632
5811 */
5812 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
5813 /**
5814 * units: level
5815 * offset 21656
5816 */
5817 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
5818 /**
5819 * units: level
5820 * offset 21680
5821 */
5822 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
5823 /**
5824 * units: level
5825 * offset 21704
5826 */
5827 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
5828 /**
5829 * units: level
5830 * offset 21728
5831 */
5832 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
5833 /**
5834 * units: level
5835 * offset 21752
5836 */
5837 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
5838 /**
5839 * units: level
5840 * offset 21776
5841 */
5842 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
5843 /**
5844 * units: level
5845 * offset 21800
5846 */
5847 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
5848 /**
5849 * units: level
5850 * offset 21824
5851 */
5852 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
5853 /**
5854 * units: level
5855 * offset 21848
5856 */
5857 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
5858 /**
5859 * units: level
5860 * offset 21872
5861 */
5862 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
5863 /**
5864 * units: lambda
5865 * offset 21896
5866 */
5867 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[4][4] = {};
5868 /**
5869 * offset 21912
5870 */
5871 uint16_t lambdaMaxDeviationLoadBins[4] = {};
5872 /**
5873 * units: RPM
5874 * offset 21920
5875 */
5876 uint16_t lambdaMaxDeviationRpmBins[4] = {};
5877 /**
5878 * units: %
5879 * offset 21928
5880 */
5881 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT] = {};
5882 /**
5883 * offset 21964
5884 */
5885 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
5886 /**
5887 * units: RPM
5888 * offset 21976
5889 */
5890 uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT] = {};
5891 /**
5892 * units: deg C
5893 * offset 21988
5894 */
5895 int8_t wwCltBins[WWAE_TABLE_SIZE] = {};
5896 /**
5897 * offset 21996
5898 */
5899 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
5900 /**
5901 * offset 22004
5902 */
5903 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
5904 /**
5905 * units: kPa
5906 * offset 22012
5907 */
5908 int8_t wwMapBins[WWAE_TABLE_SIZE] = {};
5909 /**
5910 * offset 22020
5911 */
5912 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
5913 /**
5914 * offset 22028
5915 */
5916 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
5917 /**
5918 * units: %
5919 * offset 22036
5920 */
5921 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
5922 /**
5923 * units: deg
5924 * offset 22052
5925 */
5926 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
5927 /**
5928 * units: volts
5929 * offset 22068
5930 */
5931 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
5932 /**
5933 * units: ms
5934 * offset 22076
5935 */
5936 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
5937 /**
5938 * units: kPa
5939 * offset 22092
5940 */
5941 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
5942 /**
5943 * units: load
5944 * offset 22292
5945 */
5946 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
5947 /**
5948 * units: RPM
5949 * offset 22312
5950 */
5951 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
5952 /**
5953 * units: %
5954 * offset 22322
5955 */
5956 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE] = {};
5957 /**
5958 * units: cc/lobe
5959 * offset 22422
5960 */
5961 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
5962 /**
5963 * units: RPM
5964 * offset 22442
5965 */
5966 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE] = {};
5967 /**
5968 * units: RPM
5969 * offset 22452
5970 */
5971 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
5972 /**
5973 * Knock sensor output knock detection threshold depending on current RPM.
5974 * units: dB
5975 * offset 22484
5976 */
5977 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
5978 /**
5979 * units: RPM
5980 * offset 22500
5981 */
5982 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
5983 /**
5984 * units: multiplier
5985 * offset 22504
5986 */
5987 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
5988 /**
5989 * units: C
5990 * offset 22508
5991 */
5992 int8_t cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
5993 /**
5994 * units: RPM
5995 * offset 22512
5996 */
5997 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
5998 /**
5999 * units: volt
6000 * offset 22520
6001 */
6002 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
6003 /**
6004 * units: %
6005 * offset 22536
6006 */
6007 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
6008 /**
6009 * units: volts
6010 * offset 22544
6011 */
6012 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
6013 /**
6014 * units: multiplier
6015 * offset 22552
6016 */
6017 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
6018 /**
6019 * units: %
6020 * offset 22560
6021 */
6022 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
6023 /**
6024 * units: MPH
6025 * offset 22568
6026 */
6027 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
6028 /**
6029 * units: MPH
6030 * offset 22576
6031 */
6032 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
6033 /**
6034 * units: MPH
6035 * offset 22584
6036 */
6037 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
6038 /**
6039 * units: MPH
6040 * offset 22592
6041 */
6042 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
6043 /**
6044 * units: MPH
6045 * offset 22600
6046 */
6047 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
6048 /**
6049 * units: MPH
6050 * offset 22608
6051 */
6052 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
6053 /**
6054 * units: ms
6055 * offset 22616
6056 */
6057 float tcu_shiftTime;
6058 /**
6059 * units: Volts
6060 * offset 22620
6061 */
6062 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6063 /**
6064 * units: Load
6065 * offset 22652
6066 */
6067 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6068 /**
6069 * units: RPM
6070 * offset 22660
6071 */
6072 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6073 /**
6074 * units: C
6075 * offset 22668
6076 */
6077 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
6078 /**
6079 * units: ratio
6080 * offset 22688
6081 */
6082 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
6083 /**
6084 * units: C
6085 * offset 22708
6086 */
6087 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
6088 /**
6089 * units: ratio
6090 * offset 22728
6091 */
6092 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
6093 /**
6094 * units: C
6095 * offset 22748
6096 */
6097 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
6098 /**
6099 * offset 22768
6100 */
6101 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
6102 /**
6103 * units: C
6104 * offset 22788
6105 */
6106 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
6107 /**
6108 * offset 22808
6109 */
6110 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
6111 /**
6112 * units: RPM
6113 * offset 22828
6114 */
6115 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
6116 /**
6117 * units: kPa
6118 * offset 22836
6119 */
6120 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
6121 /**
6122 * offset 22844
6123 */
6124 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
6125 /**
6126 * units: RPM
6127 * offset 23220
6128 */
6129 scaled_channel<uint8_t, 1, 100> trimRpmBins[FUEL_TRIM_RPM_COUNT] = {};
6130 /**
6131 * offset 23228
6132 */
6133 uint16_t trimLoadBins[FUEL_TRIM_LOAD_COUNT] = {};
6134};
6135static_assert(sizeof(persistent_config_s) == 23244);
6136
6137// end
6138// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
engine_type_e
debug_mode_e
trigger_type_e
firing_order_e
ve_override_e
idle_mode_e
MsIoBoxVss
launchActivationMode_e
InjectorNonlinearMode
boostType_e
MsIoBoxId
tle8888_mode_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
dc_function_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
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
char[GPPWM_NOTE_SIZE] gppwm_note_t
scaled_channel< int16_t, 10, 1 > blendBins[BLEND_FACTOR_SIZE]
scaled_channel< uint8_t, 2, 1 > blendValues[BLEND_FACTOR_SIZE]
scaled_channel< int16_t, 10, 1 > table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT]
scaled_channel< uint16_t, 100, 1 > gearRatio[TCU_GEAR_COUNT]
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
scaled_channel< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE]
uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING]
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT]
scaled_channel< int16_t, 1, 1 > primeBins[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT]
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT]
scaled_channel< int8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT]
int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE][TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT]
scaled_channel< int8_t, 5, 1 > table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE]
scaled_channel< uint8_t, 2, 1 > table[GPPWM_LOAD_COUNT][GPPWM_RPM_COUNT]
scaled_channel< int16_t, 2, 1 > loadBins[GPPWM_LOAD_COUNT]
scaled_channel< int8_t, 5, 1 > table[IGN_TRIM_SIZE][IGN_TRIM_SIZE]
scaled_channel< uint8_t, 1, 100 > maxKnockRetardRpmBins[KNOCK_TABLE_SIZE]
scaled_channel< int16_t, 10, 1 > ALSFuelAdjustment[ALS_SIZE][ALS_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int16_t, 1, 1 > cltIdleRpmBins[CLT_CURVE_SIZE]
uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8]
float crankingCycleFuelCoef[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE]
uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_RPM_SIZE]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
scaled_channel< int16_t, 1, 10 > ALSIgnSkipTable[ALS_SIZE][ALS_SIZE]
scaled_channel< uint8_t, 10, 1 > dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 20, 1 > iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]
scaled_channel< uint8_t, 4, 1 > maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > wwTauMapValues[WWAE_TABLE_SIZE]
scaled_channel< int8_t, 2, 1 > knockBaseNoise[ENGINE_NOISE_CURVE_SIZE]
uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_RPM_SIZE]
int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT]
scaled_channel< uint8_t, 1, 5 > tcu_pcAirmassBins[TCU_TABLE_WIDTH]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE]
scaled_channel< uint16_t, 1000, 1 > hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE]
float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaValues[THR_EST_SIZE]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
scaled_channel< int16_t, 100, 1 > crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > throttle2TrimRpmBins[ETB2_TRIM_SIZE]
scaled_channel< uint8_t, 1, 100 > trimRpmBins[FUEL_TRIM_RPM_COUNT]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< uint8_t, 1, 10 > minimumOilPressureValues[8]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaBins[THR_EST_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 100, 1 > wwBetaMapValues[WWAE_TABLE_SIZE]
scaled_channel< uint16_t, 10, 1 > veTable[VE_LOAD_COUNT][VE_RPM_COUNT]
scaled_channel< uint8_t, 100, 1 > wwBetaCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > lambdaMaxDeviationTable[LAM_SIZE][LAM_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[MAP_EST_LOAD_COUNT]
scaled_channel< uint16_t, 1000, 1 > hpfpDeadtimeMS[HPFP_DEADTIME_SIZE]
float postCrankingFactor[CRANKING_ENRICH_CLT_COUNT][CRANKING_ENRICH_COUNT]
scaled_channel< uint8_t, 100, 1 > wwTauCltValues[WWAE_TABLE_SIZE]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
scaled_channel< int16_t, 1, 1 > cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 1 > tcu_shiftTpsBins[TCU_TABLE_WIDTH]
int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 2 > boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< uint8_t, 2, 1 > boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
scaled_channel< uint16_t, 100, 1 > crankingFuelCoefE100[CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionIatCorrTable[IAT_IGN_CORR_LOAD_COUNT][IAT_IGN_CORR_COUNT]
float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE]
scaled_channel< uint16_t, 10, 1 > idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT]
scaled_channel< uint8_t, 1, 5 > ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT]
scaled_channel< uint8_t, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int8_t, 10, 1 > throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 147, 1 > lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT]
scaled_channel< int16_t, 10, 1 > ALSTimingRetardTable[ALS_SIZE][ALS_SIZE]
uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_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]