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