rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
engine_configuration_generated_structures_alphax-2chan.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
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 */
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
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
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 */
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 */
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
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
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 */
343 /**
344 * units: Ohm
345 * offset 16
346 */
348 /**
349 * units: Ohm
350 * offset 20
351 */
353 /**
354 * Pull-up resistor value on your board
355 * units: Ohm
356 * offset 24
357 */
359};
360static_assert(sizeof(thermistor_conf_s) == 28);
361
362// start of 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
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
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
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
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
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
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 */
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 */
647 /**
648 * Voltage when the wastegate is closed.
649 * You probably don't have one of these!
650 * units: mv
651 * offset 20
652 */
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 */
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 */
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 */
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 */
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 */
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 */
756 /**
757 offset 168 bit 2 */
758 bool enableKline : 1 {};
759 /**
760 offset 168 bit 3 */
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 */
774 /**
775 * Inhibit operation of this fan while the engine is not running.
776 offset 168 bit 7 */
778 /**
779 * Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines).
780 offset 168 bit 8 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
960 /**
961 * iTerm min value
962 * offset 408
963 */
965 /**
966 * iTerm max value
967 * offset 410
968 */
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 */
981 /**
982 * Number of cylinder the engine has.
983 * offset 416
984 */
986 /**
987 * offset 420
988 */
990 /**
991 * offset 421
992 */
994 /**
995 * Delta kPa for MAP sync
996 * units: kPa
997 * offset 422
998 */
1000 /**
1001 * need 4 byte alignment
1002 * units: units
1003 * offset 423
1004 */
1005 uint8_t alignmentFill_at_423[1] = {};
1006 /**
1007 * @@CYLINDER_BORE_TOOLTIP@@
1008 * units: mm
1009 * offset 424
1010 */
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 */
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 */
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 */
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 */
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 */
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 */
1142 /**
1143 * Cooling fan turn-on temperature threshold, in Celsius
1144 * units: deg C
1145 * offset 468
1146 */
1148 /**
1149 * Cooling fan turn-off temperature threshold, in Celsius
1150 * units: deg C
1151 * offset 472
1152 */
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 */
1170 /**
1171 * CANbus thread period in ms
1172 * units: ms
1173 * offset 484
1174 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
1621 /**
1622 offset 732 bit 11 */
1624 /**
1625 offset 732 bit 12 */
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 */
1635 /**
1636 offset 732 bit 15 */
1638 /**
1639 offset 732 bit 16 */
1640 bool flipWboChannels : 1 {};
1641 /**
1642 * Useful for individual intakes
1643 offset 732 bit 17 */
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 */
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 */
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 */
1660 /**
1661 offset 732 bit 22 */
1663 /**
1664 offset 732 bit 23 */
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 */
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 */
1681 /**
1682 offset 732 bit 28 */
1683 bool verboseKLine : 1 {};
1684 /**
1685 offset 732 bit 29 */
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 */
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 */
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 */
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 */
1849 /**
1850 * Rate the ECU will log to the SD card, in hz (log lines per second).
1851 * units: hz
1852 * offset 804
1853 */
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 */
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 */
1925 /**
1926 * units: ADC
1927 * offset 830
1928 */
1930 /**
1931 * units: rpm
1932 * offset 832
1933 */
1935 /**
1936 * Maximum time to crank starter when start/stop button is pressed
1937 * units: Seconds
1938 * offset 834
1939 */
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 */
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 */
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 */
2035 /**
2036 offset 900 bit 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 */
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 */
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 */
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 */
2066 /**
2067 offset 900 bit 10 */
2069 /**
2070 offset 900 bit 11 */
2072 /**
2073 * Verbose info in console below engineSnifferRpmThreshold
2074 * enable vvt_details
2075 offset 900 bit 12 */
2077 /**
2078 offset 900 bit 13 */
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 */
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, set to 'NONE' if you are using DC wastegate
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 */
2217 /**
2218 * units: ms
2219 * offset 968
2220 */
2222 /**
2223 * offset 972
2224 */
2226 /**
2227 * offset 976
2228 */
2230 /**
2231 * offset 980
2232 */
2234 /**
2235 * offset 984
2236 */
2238 /**
2239 * offset 988
2240 */
2242 /**
2243 * offset 992
2244 */
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 */
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 */
2334 /**
2335 * units: ADC
2336 * offset 1286
2337 */
2339 /**
2340 * Select which bus the wideband controller is attached to.
2341 offset 1288 bit 0 */
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 */
2351 /**
2352 * Second harmonic (aka double) is usually quieter background noise
2353 offset 1288 bit 3 */
2355 /**
2356 offset 1288 bit 4 */
2358 /**
2359 * Sometimes we have a performance issue while printing error
2360 offset 1288 bit 5 */
2362 /**
2363 offset 1288 bit 6 */
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 */
2376 /**
2377 offset 1288 bit 10 */
2379 /**
2380 * Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%
2381 offset 1288 bit 11 */
2383 /**
2384 * This enables smart alternator control and activates the extra alternator settings.
2385 offset 1288 bit 12 */
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 */
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 */
2397 /**
2398 offset 1288 bit 15 */
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 */
2404 /**
2405 offset 1288 bit 17 */
2407 /**
2408 * This is the Cut Mode normally used
2409 offset 1288 bit 18 */
2411 /**
2412 offset 1288 bit 19 */
2414 /**
2415 offset 1288 bit 20 */
2417 /**
2418 offset 1288 bit 21 */
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 */
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 */
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 */
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 */
2491 /**
2492 offset 1300 bit 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 */
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 */
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 */
2518 /**
2519 offset 1300 bit 8 */
2521 /**
2522 * This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.
2523 offset 1300 bit 9 */
2525 /**
2526 * Verbose info in console below engineSnifferRpmThreshold
2527 * enable trigger_details
2528 offset 1300 bit 10 */
2530 /**
2531 * Measure actual dt for PID instead of pre-defined
2532 offset 1300 bit 11 */
2534 /**
2535 offset 1300 bit 12 */
2536 bool hondaK : 1 {};
2537 /**
2538 * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
2539 offset 1300 bit 13 */
2541 /**
2542 * Read MAP sensor on ECU start-up to use as baro value.
2543 offset 1300 bit 14 */
2545 /**
2546 * In Constant mode, timing is automatically tapered to running as RPM increases.
2547 * In Table mode, the "Cranking ignition advance" table is used directly.
2548 offset 1300 bit 15 */
2550 /**
2551 * This enables the various ignition corrections during cranking (IAT, CLT and PID idle).
2552 * You probably don't need this.
2553 offset 1300 bit 16 */
2555 /**
2556 * Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor.
2557 offset 1300 bit 17 */
2558 bool flexCranking : 1 {};
2559 /**
2560 * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller
2561 offset 1300 bit 18 */
2563 /**
2564 offset 1300 bit 19 */
2566 /**
2567 * Interpolates the Ignition Retard from 0 to 100% within the RPM Range
2568 offset 1300 bit 20 */
2570 /**
2571 * Some engines are OK running semi-random sequential while other engine require phase synchronization
2572 offset 1300 bit 21 */
2574 /**
2575 * If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value.
2576 offset 1300 bit 22 */
2578 /**
2579 * If enabled, don't wait for engine start to heat O2 sensors.
2580 * WARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element.
2581 offset 1300 bit 23 */
2582 bool forceO2Heating : 1 {};
2583 /**
2584 * 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'.
2585 offset 1300 bit 24 */
2587 /**
2588 * 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'.
2589 offset 1300 bit 25 */
2591 /**
2592 offset 1300 bit 26 */
2594 /**
2595 * '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.
2596 offset 1300 bit 27 */
2597 bool sdTriggerLog : 1 {};
2598 /**
2599 offset 1300 bit 28 */
2600 bool unused1320_28 : 1 {};
2601 /**
2602 offset 1300 bit 29 */
2604 /**
2605 offset 1300 bit 30 */
2607 /**
2608 offset 1300 bit 31 */
2609 bool unusedBit_446_31 : 1 {};
2610 /**
2611 * units: count
2612 * offset 1304
2613 */
2615 /**
2616 * units: mult
2617 * offset 1308
2618 */
2620 /**
2621 * offset 1312
2622 */
2623 Gpio camInputsDebug[CAM_INPUTS_COUNT] = {};
2624 /**
2625 * Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.
2626 * units: RPM
2627 * offset 1320
2628 */
2630 /**
2631 * set warningPeriod X
2632 * units: seconds
2633 * offset 1322
2634 */
2636 /**
2637 * units: angle
2638 * offset 1324
2639 */
2641 /**
2642 * units: ms
2643 * offset 1328
2644 */
2646 /**
2647 * units: count
2648 * offset 1332
2649 */
2651 /**
2652 * Pedal position to realize that we need to reduce torque when the trigger pin is uuuh triggered
2653 * offset 1336
2654 */
2656 /**
2657 * Duration in ms or duty cycle depending on selected mode
2658 * offset 1340
2659 */
2661 /**
2662 * Length of time the deposited wall fuel takes to dissipate after the start of acceleration.
2663 * units: Seconds
2664 * offset 1344
2665 */
2666 float wwaeTau;
2667 /**
2668 * offset 1348
2669 */
2671 /**
2672 * offset 1368
2673 */
2675 /**
2676 * offset 1388
2677 */
2678 Gpio triggerInputDebugPins[TRIGGER_INPUT_PIN_COUNT] = {};
2679 /**
2680 * RPM range above upper limit for extra air taper
2681 * units: RPM
2682 * offset 1392
2683 */
2685 /**
2686 * offset 1394
2687 */
2689 /**
2690 * Closed throttle#2. todo: extract these two fields into a structure
2691 * See also tps2_1AdcChannel
2692 * units: ADC
2693 * offset 1396
2694 */
2695 int16_t tps2Min;
2696 /**
2697 * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!
2698 * See also tps1_1AdcChannel
2699 * units: ADC
2700 * offset 1398
2701 */
2702 int16_t tps2Max;
2703 /**
2704 * See also startStopButtonPin
2705 * offset 1400
2706 */
2708 /**
2709 * offset 1402
2710 */
2712 /**
2713 * need 4 byte alignment
2714 * units: units
2715 * offset 1403
2716 */
2717 uint8_t alignmentFill_at_1403[1] = {};
2718 /**
2719 * offset 1404
2720 */
2722 /**
2723 * offset 1406
2724 */
2725 scaled_channel<uint16_t, 1000, 1> tachPulsePerRev;
2726 /**
2727 * kPa value which is too low to be true
2728 * units: kPa
2729 * offset 1408
2730 */
2732 /**
2733 * kPa value which is too high to be true
2734 * units: kPa
2735 * offset 1412
2736 */
2738 /**
2739 * How long to wait for the spark to fire before recharging the coil for another spark.
2740 * units: ms
2741 * offset 1416
2742 */
2743 scaled_channel<uint16_t, 1000, 1> multisparkSparkDuration;
2744 /**
2745 * This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table.
2746 * units: ms
2747 * offset 1418
2748 */
2749 scaled_channel<uint16_t, 1000, 1> multisparkDwell;
2750 /**
2751 * See cltIdleRpmBins
2752 * offset 1420
2753 */
2755 /**
2756 * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment.
2757 * units: Fraction
2758 * offset 1440
2759 */
2761 /**
2762 * See also EFI_CONSOLE_RX_BRAIN_PIN
2763 * offset 1444
2764 */
2766 /**
2767 * offset 1446
2768 */
2770 /**
2771 * offset 1448
2772 */
2773 Gpio auxValves[AUX_DIGITAL_VALVE_COUNT] = {};
2774 /**
2775 * offset 1452
2776 */
2778 /**
2779 * offset 1454
2780 */
2782 /**
2783 * units: voltage
2784 * offset 1456
2785 */
2787 /**
2788 * Pedal in the floor
2789 * units: voltage
2790 * offset 1460
2791 */
2793 /**
2794 * on IGN voltage detection turn fuel pump on to build fuel pressure
2795 * units: seconds
2796 * offset 1464
2797 */
2799 /**
2800 * If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation
2801 * units: RPM
2802 * offset 1466
2803 */
2805 /**
2806 * See Over/Undervoltage Shutdown/Retry bit in documentation
2807 offset 1468 bit 0 */
2809 /**
2810 offset 1468 bit 1 */
2811 bool mc33810Gpgd0Mode : 1 {};
2812 /**
2813 offset 1468 bit 2 */
2814 bool mc33810Gpgd1Mode : 1 {};
2815 /**
2816 offset 1468 bit 3 */
2817 bool mc33810Gpgd2Mode : 1 {};
2818 /**
2819 offset 1468 bit 4 */
2820 bool mc33810Gpgd3Mode : 1 {};
2821 /**
2822 * Send out board statistics
2823 offset 1468 bit 5 */
2825 /**
2826 * global_can_data performance hack
2827 offset 1468 bit 6 */
2829 /**
2830 offset 1468 bit 7 */
2832 /**
2833 offset 1468 bit 8 */
2835 /**
2836 * Use Aux Speed 1 as one of speeds for wheel slip ratio?
2837 offset 1468 bit 9 */
2839 /**
2840 * VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?
2841 offset 1468 bit 10 */
2843 /**
2844 offset 1468 bit 11 */
2845 bool is_enabled_spi_5 : 1 {};
2846 /**
2847 offset 1468 bit 12 */
2848 bool is_enabled_spi_6 : 1 {};
2849 /**
2850 * AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller
2851 offset 1468 bit 13 */
2853 /**
2854 offset 1468 bit 14 */
2856 /**
2857 offset 1468 bit 15 */
2859 /**
2860 offset 1468 bit 16 */
2861 bool devBit01 : 1 {};
2862 /**
2863 offset 1468 bit 17 */
2864 bool devBit0 : 1 {};
2865 /**
2866 offset 1468 bit 18 */
2867 bool devBit1 : 1 {};
2868 /**
2869 offset 1468 bit 19 */
2870 bool devBit2 : 1 {};
2871 /**
2872 offset 1468 bit 20 */
2873 bool devBit3 : 1 {};
2874 /**
2875 offset 1468 bit 21 */
2876 bool devBit4 : 1 {};
2877 /**
2878 offset 1468 bit 22 */
2879 bool devBit5 : 1 {};
2880 /**
2881 offset 1468 bit 23 */
2882 bool devBit6 : 1 {};
2883 /**
2884 offset 1468 bit 24 */
2885 bool devBit7 : 1 {};
2886 /**
2887 offset 1468 bit 25 */
2889 /**
2890 * "Available via TS Plugin see https://rusefi.com/s/knock"
2891 offset 1468 bit 26 */
2893 /**
2894 offset 1468 bit 27 */
2896 /**
2897 offset 1468 bit 28 */
2898 bool unusedBit_513_28 : 1 {};
2899 /**
2900 offset 1468 bit 29 */
2901 bool unusedBit_513_29 : 1 {};
2902 /**
2903 offset 1468 bit 30 */
2904 bool unusedBit_513_30 : 1 {};
2905 /**
2906 offset 1468 bit 31 */
2907 bool unusedBit_513_31 : 1 {};
2908 /**
2909 * offset 1472
2910 */
2912 /**
2913 * This value is an added for base idle value. Idle Value added when coasting and transitioning into idle.
2914 * units: percent
2915 * offset 1474
2916 */
2918 /**
2919 * offset 1476
2920 */
2922 /**
2923 * Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2924 * units: kph
2925 * offset 1478
2926 */
2928 /**
2929 * Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears.
2930 * units: kph
2931 * offset 1479
2932 */
2934 /**
2935 * 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.
2936 * units: roc
2937 * offset 1480
2938 */
2940 /**
2941 * offset 1484
2942 */
2943 brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT] = {};
2944 /**
2945 * offset 1488
2946 */
2948 /**
2949 * Sets what part of injection's is controlled by the injection phase table.
2950 * offset 1489
2951 */
2953 /**
2954 * See http://rusefi.com/s/debugmode
2955 * offset 1490
2956 */
2958 /**
2959 * Additional idle % when fan #1 is active
2960 * units: %
2961 * offset 1491
2962 */
2964 /**
2965 * Band rate for primary TTL
2966 * units: BPs
2967 * offset 1492
2968 */
2970 /**
2971 * For decel we simply multiply delta of TPS and tFor decel we do not use table?!
2972 * units: roc
2973 * offset 1496
2974 */
2976 /**
2977 * Magic multiplier, we multiply delta of TPS and get fuel squirt duration
2978 * units: coeff
2979 * offset 1500
2980 */
2982 /**
2983 * units: voltage
2984 * offset 1504
2985 */
2987 /**
2988 * Pedal in the floor
2989 * units: voltage
2990 * offset 1508
2991 */
2993 /**
2994 * offset 1512
2995 */
2997 /**
2998 * Override the Y axis (load) value used for the VE table.
2999 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3000 * offset 1513
3001 */
3003 /**
3004 * offset 1514
3005 */
3007 /**
3008 * Override the Y axis (load) value used for the AFR table.
3009 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3010 * offset 1515
3011 */
3013 /**
3014 * units: A
3015 * offset 1516
3016 */
3017 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_peak;
3018 /**
3019 * units: A
3020 * offset 1517
3021 */
3022 scaled_channel<uint8_t, 10, 1> mc33_hpfp_i_hold;
3023 /**
3024 * How long to deactivate power when hold current is reached before applying power again
3025 * units: us
3026 * offset 1518
3027 */
3029 /**
3030 * Maximum amount of time the solenoid can be active before assuming a programming error
3031 * units: ms
3032 * offset 1519
3033 */
3035 /**
3036 * Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)
3037 offset 1520 bit 0 */
3039 /**
3040 * Allow OpenBLT on Primary CAN
3041 offset 1520 bit 1 */
3042 bool canOpenBLT : 1 {};
3043 /**
3044 * Allow OpenBLT on Secondary CAN
3045 offset 1520 bit 2 */
3046 bool can2OpenBLT : 1 {};
3047 /**
3048 * Select whether to configure injector flow in volumetric flow (default, cc/min) or mass flow (g/s).
3049 offset 1520 bit 3 */
3051 /**
3052 offset 1520 bit 4 */
3054 /**
3055 offset 1520 bit 5 */
3056 bool kLineDoHondaSend : 1 {};
3057 /**
3058 * ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled
3059 offset 1520 bit 6 */
3060 bool can1ListenMode : 1 {};
3061 /**
3062 offset 1520 bit 7 */
3063 bool can2ListenMode : 1 {};
3064 /**
3065 offset 1520 bit 8 */
3066 bool unusedBit_549_8 : 1 {};
3067 /**
3068 offset 1520 bit 9 */
3069 bool unusedBit_549_9 : 1 {};
3070 /**
3071 offset 1520 bit 10 */
3072 bool unusedBit_549_10 : 1 {};
3073 /**
3074 offset 1520 bit 11 */
3075 bool unusedBit_549_11 : 1 {};
3076 /**
3077 offset 1520 bit 12 */
3078 bool unusedBit_549_12 : 1 {};
3079 /**
3080 offset 1520 bit 13 */
3081 bool unusedBit_549_13 : 1 {};
3082 /**
3083 offset 1520 bit 14 */
3084 bool unusedBit_549_14 : 1 {};
3085 /**
3086 offset 1520 bit 15 */
3087 bool unusedBit_549_15 : 1 {};
3088 /**
3089 offset 1520 bit 16 */
3090 bool unusedBit_549_16 : 1 {};
3091 /**
3092 offset 1520 bit 17 */
3093 bool unusedBit_549_17 : 1 {};
3094 /**
3095 offset 1520 bit 18 */
3096 bool unusedBit_549_18 : 1 {};
3097 /**
3098 offset 1520 bit 19 */
3099 bool unusedBit_549_19 : 1 {};
3100 /**
3101 offset 1520 bit 20 */
3102 bool unusedBit_549_20 : 1 {};
3103 /**
3104 offset 1520 bit 21 */
3105 bool unusedBit_549_21 : 1 {};
3106 /**
3107 offset 1520 bit 22 */
3108 bool unusedBit_549_22 : 1 {};
3109 /**
3110 offset 1520 bit 23 */
3111 bool unusedBit_549_23 : 1 {};
3112 /**
3113 offset 1520 bit 24 */
3114 bool unusedBit_549_24 : 1 {};
3115 /**
3116 offset 1520 bit 25 */
3117 bool unusedBit_549_25 : 1 {};
3118 /**
3119 offset 1520 bit 26 */
3120 bool unusedBit_549_26 : 1 {};
3121 /**
3122 offset 1520 bit 27 */
3123 bool unusedBit_549_27 : 1 {};
3124 /**
3125 offset 1520 bit 28 */
3126 bool unusedBit_549_28 : 1 {};
3127 /**
3128 offset 1520 bit 29 */
3129 bool unusedBit_549_29 : 1 {};
3130 /**
3131 offset 1520 bit 30 */
3132 bool unusedBit_549_30 : 1 {};
3133 /**
3134 offset 1520 bit 31 */
3135 bool unusedBit_549_31 : 1 {};
3136 /**
3137 * offset 1524
3138 */
3140 /**
3141 * offset 1525
3142 */
3144 /**
3145 * Duration of each test pulse
3146 * units: ms
3147 * offset 1526
3148 */
3149 scaled_channel<uint16_t, 100, 1> benchTestOnTime;
3150 /**
3151 * units: %
3152 * offset 1528
3153 */
3155 /**
3156 * units: %
3157 * offset 1529
3158 */
3159 scaled_channel<uint8_t, 1, 10> lambdaProtectionRestoreLoad;
3160 /**
3161 * offset 1530
3162 */
3164 /**
3165 * need 4 byte alignment
3166 * units: units
3167 * offset 1531
3168 */
3169 uint8_t alignmentFill_at_1531[1] = {};
3170 /**
3171 * offset 1532
3172 */
3174 /**
3175 * offset 1534
3176 */
3178 /**
3179 * offset 1536
3180 */
3182 /**
3183 * offset 1537
3184 */
3186 /**
3187 * Override the Y axis (load) value used for the ignition table.
3188 * Advanced users only: If you aren't sure you need this, you probably don't need this.
3189 * offset 1538
3190 */
3192 /**
3193 * Select which fuel pressure sensor measures the pressure of the fuel at your injectors.
3194 * offset 1539
3195 */
3197 /**
3198 * offset 1540
3199 */
3201 /**
3202 * offset 1542
3203 */
3205 /**
3206 * need 4 byte alignment
3207 * units: units
3208 * offset 1543
3209 */
3210 uint8_t alignmentFill_at_1543[1] = {};
3211 /**
3212 * MAP value above which fuel is cut in case of overboost.
3213 * Set to 0 to disable overboost cut.
3214 * units: kPa (absolute)
3215 * offset 1544
3216 */
3218 /**
3219 * units: kg/h
3220 * offset 1548
3221 */
3222 scaled_channel<uint8_t, 1, 5> tchargeBins[16] = {};
3223 /**
3224 * units: ratio
3225 * offset 1564
3226 */
3227 scaled_channel<uint8_t, 100, 1> tchargeValues[16] = {};
3228 /**
3229 * Fixed timing, useful for TDC testing
3230 * units: deg
3231 * offset 1580
3232 */
3234 /**
3235 * MAP voltage for low point
3236 * units: v
3237 * offset 1584
3238 */
3240 /**
3241 * MAP voltage for low point
3242 * units: v
3243 * offset 1588
3244 */
3246 /**
3247 * EGO value correction
3248 * units: value
3249 * offset 1592
3250 */
3252 /**
3253 * VVT output solenoid pin for this cam
3254 * offset 1596
3255 */
3256 output_pin_e vvtPins[CAM_INPUTS_COUNT] = {};
3257 /**
3258 * offset 1604
3259 */
3261 /**
3262 * offset 1608
3263 */
3264 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMinTps;
3265 /**
3266 * offset 1609
3267 */
3268 scaled_channel<uint8_t, 200, 1> tChargeMinRpmMaxTps;
3269 /**
3270 * offset 1610
3271 */
3272 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMinTps;
3273 /**
3274 * offset 1611
3275 */
3276 scaled_channel<uint8_t, 200, 1> tChargeMaxRpmMaxTps;
3277 /**
3278 * offset 1612
3279 */
3281 /**
3282 * 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.
3283 * units: deg BTDC
3284 * offset 1614
3285 */
3287 /**
3288 * 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
3289 * units: deg BTDC
3290 * offset 1615
3291 */
3293 /**
3294 * units: Hz
3295 * offset 1616
3296 */
3298 /**
3299 * set vvt_mode X
3300 * offset 1620
3301 */
3302 vvt_mode_e vvtMode[CAMS_PER_BANK] = {};
3303 /**
3304 * Additional idle % when fan #2 is active
3305 * units: %
3306 * offset 1622
3307 */
3309 /**
3310 * Delay to allow fuel pressure to build before firing the priming pulse.
3311 * units: sec
3312 * offset 1623
3313 */
3314 scaled_channel<uint8_t, 100, 1> primingDelay;
3315 /**
3316 * offset 1624
3317 */
3318 adc_channel_e auxAnalogInputs[LUA_ANALOG_INPUT_COUNT] = {};
3319 /**
3320 * offset 1632
3321 */
3322 output_pin_e trailingCoilPins[MAX_CYLINDER_COUNT] = {};
3323 /**
3324 * offset 1656
3325 */
3327 /**
3328 * offset 1657
3329 */
3331 /**
3332 * None = I have a MAP-referenced fuel pressure regulator
3333 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
3334 * Sensed rail pressure = I have a fuel pressure sensor
3335 * HPFP fuel mass compensation = manual mode for GDI engines
3336 * offset 1658
3337 */
3339 /**
3340 * offset 1659
3341 */
3343 /**
3344 * This is the pressure at which your injector flow is known.
3345 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
3346 * This is gauge pressure/in reference to atmospheric.
3347 * units: kPa
3348 * offset 1660
3349 */
3351 /**
3352 * offset 1664
3353 */
3355 /**
3356 * offset 1696
3357 */
3359 /**
3360 * units: Deg
3361 * offset 1728
3362 */
3364 /**
3365 * units: Hz
3366 * offset 1730
3367 */
3368 int16_t etbFreq;
3369 /**
3370 * offset 1732
3371 */
3373 /**
3374 * For micro-stepping, make sure that PWM frequency (etbFreq) is high enough
3375 * offset 1752
3376 */
3378 /**
3379 * Use to limit the current when the stepper motor is idle, not moving (100% = no limit)
3380 * units: %
3381 * offset 1753
3382 */
3384 /**
3385 * Use to limit the max.current through the stepper motor (100% = no limit)
3386 * units: %
3387 * offset 1754
3388 */
3390 /**
3391 * offset 1755
3392 */
3394 /**
3395 * per-cylinder ignition and fueling timing correction for uneven engines
3396 * units: deg
3397 * offset 1756
3398 */
3399 angle_t timing_offset_cylinder[MAX_CYLINDER_COUNT] = {};
3400 /**
3401 * units: seconds
3402 * offset 1804
3403 */
3405 /**
3406 * offset 1808
3407 */
3409 /**
3410 * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc.
3411 * offset 1809
3412 */
3414 /**
3415 * offset 1810
3416 */
3418 /**
3419 * offset 1811
3420 */
3422 /**
3423 * offset 1812
3424 */
3426 /**
3427 * offset 1813
3428 */
3430 /**
3431 * offset 1814
3432 */
3434 /**
3435 * offset 1815
3436 */
3438 /**
3439 * offset 1816
3440 */
3442 /**
3443 * offset 1817
3444 */
3446 /**
3447 * ResetB
3448 * offset 1818
3449 */
3451 /**
3452 * offset 1820
3453 */
3455 /**
3456 * Brake pedal switch
3457 * offset 1822
3458 */
3460 /**
3461 * VVT output PID
3462 * TODO: rename to vvtPid
3463 * offset 1824
3464 */
3465 pid_s auxPid[CAMS_PER_BANK] = {};
3466 /**
3467 * offset 1864
3468 */
3470 /**
3471 * units: C
3472 * offset 1896
3473 */
3474 scaled_channel<int8_t, 1, 5> primeBins[PRIME_CURVE_COUNT] = {};
3475 /**
3476 * offset 1904
3477 */
3479 /**
3480 * offset 1924
3481 */
3483 /**
3484 * need 4 byte alignment
3485 * units: units
3486 * offset 1925
3487 */
3488 uint8_t alignmentFill_at_1925[1] = {};
3489 /**
3490 * offset 1926
3491 */
3493 /**
3494 * Cooling fan turn-on temperature threshold, in Celsius
3495 * units: deg C
3496 * offset 1928
3497 */
3499 /**
3500 * Cooling fan turn-off temperature threshold, in Celsius
3501 * units: deg C
3502 * offset 1929
3503 */
3505 /**
3506 * offset 1930
3507 */
3509 /**
3510 * offset 1932
3511 */
3513 /**
3514 * offset 1934
3515 */
3517 /**
3518 * need 4 byte alignment
3519 * units: units
3520 * offset 1935
3521 */
3522 uint8_t alignmentFill_at_1935[1] = {};
3523 /**
3524 * offset 1936
3525 */
3527 /**
3528 * need 4 byte alignment
3529 * units: units
3530 * offset 1938
3531 */
3532 uint8_t alignmentFill_at_1938[2] = {};
3533 /**
3534 * units: hz
3535 * offset 1940
3536 */
3538 /**
3539 * offset 1944
3540 */
3541 sent_input_pin_e sentInputPins[SENT_INPUT_COUNT] = {};
3542 /**
3543 * This sets the RPM above which fuel cut is active.
3544 * units: rpm
3545 * offset 1946
3546 */
3548 /**
3549 * This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle
3550 * units: rpm
3551 * offset 1948
3552 */
3554 /**
3555 * Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position.
3556 * units: %
3557 * offset 1950
3558 */
3560 /**
3561 * Fuel cutoff is disabled when the engine is cold.
3562 * units: C
3563 * offset 1952
3564 */
3566 /**
3567 * Increases PID reaction for RPM<target by adding extra percent to PID-error
3568 * units: %
3569 * offset 1954
3570 */
3572 /**
3573 * MAP value above which fuel injection is re-enabled.
3574 * units: kPa
3575 * offset 1956
3576 */
3578 /**
3579 * need 4 byte alignment
3580 * units: units
3581 * offset 1958
3582 */
3583 uint8_t alignmentFill_at_1958[2] = {};
3584 /**
3585 * offset 1960
3586 */
3588 /**
3589 * offset 1980
3590 */
3592 /**
3593 * offset 2000
3594 */
3595 gppwm_note_t scriptCurveName[SCRIPT_CURVE_COUNT] = {};
3596 /**
3597 * offset 2096
3598 */
3599 gppwm_note_t scriptTableName[SCRIPT_TABLE_COUNT] = {};
3600 /**
3601 * offset 2160
3602 */
3603 gppwm_note_t scriptSettingName[SCRIPT_SETTING_COUNT] = {};
3604 /**
3605 * Heat transfer coefficient at zero flow.
3606 * 0 means the air charge is fully heated to the same temperature as CLT.
3607 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3608 * offset 2288
3609 */
3611 /**
3612 * Heat transfer coefficient at high flow, as defined by "max air flow".
3613 * 0 means the air charge is fully heated to the same temperature as CLT.
3614 * 1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT.
3615 * offset 2292
3616 */
3618 /**
3619 * High flow point for heat transfer estimation.
3620 * Set this to perhaps 50-75% of your maximum airflow at wide open throttle.
3621 * units: kg/h
3622 * offset 2296
3623 */
3625 /**
3626 * Maximum allowed rate of increase allowed for the estimated charge temperature
3627 * units: deg/sec
3628 * offset 2300
3629 */
3631 /**
3632 * Maximum allowed rate of decrease allowed for the estimated charge temperature
3633 * units: deg/sec
3634 * offset 2304
3635 */
3637 /**
3638 * offset 2308
3639 */
3641 /**
3642 * iTerm min value
3643 * offset 2312
3644 */
3646 /**
3647 * iTerm max value
3648 * offset 2314
3649 */
3651 /**
3652 * See useIdleTimingPidControl
3653 * offset 2316
3654 */
3656 /**
3657 * When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop
3658 * offset 2336
3659 */
3661 /**
3662 * offset 2340
3663 */
3665 /**
3666 * offset 2341
3667 */
3669 /**
3670 * A delay in cycles between fuel-enrich. portions
3671 * units: cycles
3672 * offset 2342
3673 */
3675 /**
3676 * A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions
3677 * units: coef
3678 * offset 2344
3679 */
3681 /**
3682 * offset 2348
3683 */
3685 /**
3686 * offset 2349
3687 */
3689 /**
3690 * iTerm min value
3691 * offset 2350
3692 */
3694 /**
3695 * offset 2352
3696 */
3698 /**
3699 * Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.
3700 * E0 = 14.7
3701 * E10 = 14.1
3702 * E85 = 9.9
3703 * E100 = 9.0
3704 * units: :1
3705 * offset 2353
3706 */
3707 scaled_channel<uint8_t, 10, 1> stoichRatioPrimary;
3708 /**
3709 * iTerm max value
3710 * offset 2354
3711 */
3713 /**
3714 * This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.
3715 * units: %
3716 * offset 2356
3717 */
3719 /**
3720 * Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor
3721 * offset 2360
3722 */
3723 uint8_t cylinderBankSelect[MAX_CYLINDER_COUNT] = {};
3724 /**
3725 * units: mg
3726 * offset 2372
3727 */
3728 scaled_channel<uint8_t, 1, 5> primeValues[PRIME_CURVE_COUNT] = {};
3729 /**
3730 * Trigger comparator center point voltage
3731 * units: V
3732 * offset 2380
3733 */
3734 scaled_channel<uint8_t, 50, 1> triggerCompCenterVolt;
3735 /**
3736 * Trigger comparator hysteresis voltage (Min)
3737 * units: V
3738 * offset 2381
3739 */
3740 scaled_channel<uint8_t, 50, 1> triggerCompHystMin;
3741 /**
3742 * Trigger comparator hysteresis voltage (Max)
3743 * units: V
3744 * offset 2382
3745 */
3746 scaled_channel<uint8_t, 50, 1> triggerCompHystMax;
3747 /**
3748 * VR-sensor saturation RPM
3749 * units: RPM
3750 * offset 2383
3751 */
3752 scaled_channel<uint8_t, 1, 50> triggerCompSensorSatRpm;
3753 /**
3754 * units: ratio
3755 * offset 2384
3756 */
3757 scaled_channel<uint16_t, 100, 1> tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE] = {};
3758 /**
3759 * units: RPM
3760 * offset 2396
3761 */
3762 uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE] = {};
3763 /**
3764 * offset 2402
3765 */
3767 /**
3768 * offset 2403
3769 */
3771 /**
3772 * offset 2404
3773 */
3775 /**
3776 * need 4 byte alignment
3777 * units: units
3778 * offset 2406
3779 */
3780 uint8_t alignmentFill_at_2406[2] = {};
3781 /**
3782 * offset 2408
3783 */
3784 gppwm_channel gppwm[GPPWM_CHANNELS] = {};
3785 /**
3786 * Boost Current
3787 * units: mA
3788 * offset 2840
3789 */
3791 /**
3792 * Peak Current
3793 * units: mA
3794 * offset 2842
3795 */
3796 uint16_t mc33_i_peak;
3797 /**
3798 * Hold Current
3799 * units: mA
3800 * offset 2844
3801 */
3802 uint16_t mc33_i_hold;
3803 /**
3804 * 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.
3805 * units: us
3806 * offset 2846
3807 */
3809 /**
3810 * units: us
3811 * offset 2848
3812 */
3814 /**
3815 * Peak phase duration
3816 * units: us
3817 * offset 2850
3818 */
3820 /**
3821 * units: us
3822 * offset 2852
3823 */
3825 /**
3826 * units: us
3827 * offset 2854
3828 */
3830 /**
3831 * Hold phase duration
3832 * units: us
3833 * offset 2856
3834 */
3836 /**
3837 * offset 2858
3838 */
3840 /**
3841 * offset 2859
3842 */
3844 /**
3845 * offset 2860
3846 */
3848 /**
3849 * offset 2861
3850 */
3851 pin_output_mode_e tcu_solenoid_mode[TCU_SOLENOID_COUNT] = {};
3852 /**
3853 * need 4 byte alignment
3854 * units: units
3855 * offset 2867
3856 */
3857 uint8_t alignmentFill_at_2867[1] = {};
3858 /**
3859 * units: ratio
3860 * offset 2868
3861 */
3862 float triggerGapOverrideFrom[GAP_TRACKING_LENGTH] = {};
3863 /**
3864 * units: ratio
3865 * offset 2940
3866 */
3867 float triggerGapOverrideTo[GAP_TRACKING_LENGTH] = {};
3868 /**
3869 * 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.
3870 * units: rpm
3871 * offset 3012
3872 */
3873 scaled_channel<uint8_t, 1, 50> maxCamPhaseResolveRpm;
3874 /**
3875 * Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust...
3876 * units: sec
3877 * offset 3013
3878 */
3879 scaled_channel<uint8_t, 10, 1> dfcoDelay;
3880 /**
3881 * 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.
3882 * units: sec
3883 * offset 3014
3884 */
3885 scaled_channel<uint8_t, 10, 1> acDelay;
3886 /**
3887 * offset 3015
3888 */
3890 /**
3891 * units: mg
3892 * offset 3016
3893 */
3894 scaled_channel<uint16_t, 1000, 1> fordInjectorSmallPulseBreakPoint;
3895 /**
3896 * 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.
3897 * units: %
3898 * offset 3018
3899 */
3901 /**
3902 * units: lobes/cam
3903 * offset 3019
3904 */
3906 /**
3907 * offset 3020
3908 */
3910 /**
3911 * Low engine speed for A/C. Larger engines can survive lower values
3912 * units: RPM
3913 * offset 3021
3914 */
3915 scaled_channel<int8_t, 1, 10> acLowRpmLimit;
3916 /**
3917 * If the requested activation time is below this angle, don't bother running the pump
3918 * units: deg
3919 * offset 3022
3920 */
3922 /**
3923 * need 4 byte alignment
3924 * units: units
3925 * offset 3023
3926 */
3927 uint8_t alignmentFill_at_3023[1] = {};
3928 /**
3929 * Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm.
3930 * units: cc
3931 * offset 3024
3932 */
3933 scaled_channel<uint16_t, 1000, 1> hpfpPumpVolume;
3934 /**
3935 * How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)
3936 * units: deg
3937 * offset 3026
3938 */
3940 /**
3941 * offset 3027
3942 */
3944 /**
3945 * units: %/kPa
3946 * offset 3028
3947 */
3948 scaled_channel<uint16_t, 1000, 1> hpfpPidP;
3949 /**
3950 * units: %/kPa/lobe
3951 * offset 3030
3952 */
3953 scaled_channel<uint16_t, 100000, 1> hpfpPidI;
3954 /**
3955 * 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.
3956 * units: kPa/s
3957 * offset 3032
3958 */
3960 /**
3961 * offset 3034
3962 */
3964 /**
3965 * units: ratio
3966 * offset 3042
3967 */
3968 scaled_channel<uint16_t, 100, 1> gearRatio[TCU_GEAR_COUNT] = {};
3969 /**
3970 * We need to give engine time to build oil pressure without diverting it to VVT
3971 * units: ms
3972 * offset 3062
3973 */
3975 /**
3976 * offset 3064
3977 */
3979 /**
3980 * offset 3065
3981 */
3983 /**
3984 * During revolution where ACR should be disabled at what specific angle to disengage
3985 * units: deg
3986 * offset 3066
3987 */
3989 /**
3990 * offset 3068
3991 */
3993 /**
3994 * offset 3088
3995 */
3997 /**
3998 * offset 3108
3999 */
4001 /**
4002 * offset 3110
4003 */
4005 /**
4006 * need 4 byte alignment
4007 * units: units
4008 * offset 3111
4009 */
4010 uint8_t alignmentFill_at_3111[1] = {};
4011 /**
4012 * offset 3112
4013 */
4015 /**
4016 * offset 3114
4017 */
4019 /**
4020 * need 4 byte alignment
4021 * units: units
4022 * offset 3115
4023 */
4024 uint8_t alignmentFill_at_3115[1] = {};
4025 /**
4026 * offset 3116
4027 */
4029 /**
4030 * offset 3118
4031 */
4033 /**
4034 * offset 3120
4035 */
4037 /**
4038 * need 4 byte alignment
4039 * units: units
4040 * offset 3121
4041 */
4042 uint8_t alignmentFill_at_3121[1] = {};
4043 /**
4044 * offset 3122
4045 */
4047 /**
4048 * offset 3124
4049 */
4051 /**
4052 * offset 3126
4053 */
4055 /**
4056 * need 4 byte alignment
4057 * units: units
4058 * offset 3127
4059 */
4060 uint8_t alignmentFill_at_3127[1] = {};
4061 /**
4062 * offset 3128
4063 */
4065 /**
4066 * offset 3130
4067 */
4069 /**
4070 * Set a minimum allowed target position to avoid slamming/driving against the hard mechanical stop in the throttle.
4071 * units: %
4072 * offset 3132
4073 */
4074 scaled_channel<uint8_t, 10, 1> etbMinimumPosition;
4075 /**
4076 * need 4 byte alignment
4077 * units: units
4078 * offset 3133
4079 */
4080 uint8_t alignmentFill_at_3133[1] = {};
4081 /**
4082 * offset 3134
4083 */
4085 /**
4086 * Individual characters are accessible using vin(index) Lua function
4087 * offset 3136
4088 */
4090 /**
4091 * units: C
4092 * offset 3153
4093 */
4095 /**
4096 * offset 3154
4097 */
4098 uint16_t highSpeedOffsets[HIGH_SPEED_COUNT] = {};
4099 /**
4100 * offset 3218
4101 */
4103 /**
4104 * need 4 byte alignment
4105 * units: units
4106 * offset 3219
4107 */
4108 uint8_t alignmentFill_at_3219[1] = {};
4109 /**
4110 * offset 3220
4111 */
4112 switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT] = {};
4113 /**
4114 * units: rpm
4115 * offset 3236
4116 */
4117 int16_t ALSMinRPM;
4118 /**
4119 * units: rpm
4120 * offset 3238
4121 */
4122 int16_t ALSMaxRPM;
4123 /**
4124 * units: sec
4125 * offset 3240
4126 */
4128 /**
4129 * units: C
4130 * offset 3242
4131 */
4133 /**
4134 * units: C
4135 * offset 3243
4136 */
4138 /**
4139 * offset 3244
4140 */
4142 /**
4143 * offset 3245
4144 */
4146 /**
4147 * units: %
4148 * offset 3246
4149 */
4151 /**
4152 * If you have SENT TPS sensor please select type. For analog TPS leave None
4153 * offset 3247
4154 */
4156 /**
4157 * offset 3248
4158 */
4160 /**
4161 * need 4 byte alignment
4162 * units: units
4163 * offset 3250
4164 */
4165 uint8_t alignmentFill_at_3250[2] = {};
4166 /**
4167 * units: %
4168 * offset 3252
4169 */
4171 /**
4172 * units: %
4173 * offset 3256
4174 */
4176 /**
4177 * offset 3260
4178 */
4180 /**
4181 * 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
4182 * units: kPa (absolute)
4183 * offset 3264
4184 */
4185 scaled_channel<uint8_t, 2, 1> acPressureEnableHyst;
4186 /**
4187 * offset 3265
4188 */
4190 /**
4191 * For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%
4192 * units: %
4193 * offset 3266
4194 */
4195 scaled_channel<uint8_t, 2, 1> tpsSecondaryMaximum;
4196 /**
4197 * For Toyota ETCS-i, use ~69%
4198 * units: %
4199 * offset 3267
4200 */
4201 scaled_channel<uint8_t, 2, 1> ppsSecondaryMaximum;
4202 /**
4203 * offset 3268
4204 */
4205 pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT] = {};
4206 /**
4207 * offset 3276
4208 */
4210 /**
4211 * offset 3278
4212 */
4214 /**
4215 * offset 3280
4216 */
4218 /**
4219 * offset 3281
4220 */
4222 /**
4223 * Crank angle ATDC of first lobe peak
4224 * units: deg
4225 * offset 3282
4226 */
4228 /**
4229 * units: us
4230 * offset 3284
4231 */
4233 /**
4234 * 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)
4235 * units: RPM
4236 * offset 3286
4237 */
4238 scaled_channel<uint8_t, 1, 10> rpmSoftLimitWindowSize;
4239 /**
4240 * Degrees of timing REMOVED from actual timing during soft RPM limit window
4241 * units: deg
4242 * offset 3287
4243 */
4244 scaled_channel<uint8_t, 5, 1> rpmSoftLimitTimingRetard;
4245 /**
4246 * % of fuel ADDED during window
4247 * units: %
4248 * offset 3288
4249 */
4250 scaled_channel<uint8_t, 5, 1> rpmSoftLimitFuelAdded;
4251 /**
4252 * 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
4253 * units: RPM
4254 * offset 3289
4255 */
4256 scaled_channel<uint8_t, 1, 10> rpmHardLimitHyst;
4257 /**
4258 * Time between bench test pulses
4259 * units: ms
4260 * offset 3290
4261 */
4262 scaled_channel<uint16_t, 10, 1> benchTestOffTime;
4263 /**
4264 * 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
4265 * units: kPa (absolute)
4266 * offset 3292
4267 */
4268 scaled_channel<uint8_t, 2, 1> boostCutPressureHyst;
4269 /**
4270 * Boost duty cycle modified by gear
4271 * units: %
4272 * offset 3293
4273 */
4274 scaled_channel<int8_t, 2, 1> gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT] = {};
4275 /**
4276 * need 4 byte alignment
4277 * units: units
4278 * offset 3303
4279 */
4280 uint8_t alignmentFill_at_3303[1] = {};
4281 /**
4282 * How many test bench pulses do you want
4283 * offset 3304
4284 */
4286 /**
4287 * How long initial idle adder is held before starting to decay.
4288 * units: seconds
4289 * offset 3308
4290 */
4291 scaled_channel<uint8_t, 10, 1> iacByTpsHoldTime;
4292 /**
4293 * How long it takes to remove initial IAC adder to return to normal idle.
4294 * units: seconds
4295 * offset 3309
4296 */
4297 scaled_channel<uint8_t, 10, 1> iacByTpsDecayTime;
4298 /**
4299 * offset 3310
4300 */
4301 switch_input_pin_e tcu_rangeInput[RANGE_INPUT_COUNT] = {};
4302 /**
4303 * offset 3322
4304 */
4305 pin_input_mode_e tcu_rangeInputMode[RANGE_INPUT_COUNT] = {};
4306 /**
4307 * Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead.
4308 * units: ratio
4309 * offset 3328
4310 */
4311 scaled_channel<uint16_t, 10000, 1> canVssScaling;
4312 /**
4313 * need 4 byte alignment
4314 * units: units
4315 * offset 3330
4316 */
4317 uint8_t alignmentFill_at_3330[2] = {};
4318 /**
4319 * offset 3332
4320 */
4322 /**
4323 * offset 3364
4324 */
4326 /**
4327 * offset 3396
4328 */
4330 /**
4331 * offset 3428
4332 */
4334 /**
4335 * Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor.
4336 * offset 3460
4337 */
4339 /**
4340 * Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor.
4341 * offset 3461
4342 */
4344 /**
4345 * offset 3462
4346 */
4347 Gpio dacOutputPins[DAC_OUTPUT_COUNT] = {};
4348 /**
4349 * offset 3466
4350 */
4352 /**
4353 * Number of speedometer pulses per kilometer travelled.
4354 * offset 3468
4355 */
4357 /**
4358 * offset 3470
4359 */
4360 uint8_t simulatorCamPosition[CAM_INPUTS_COUNT] = {};
4361 /**
4362 * offset 3474
4363 */
4365 /**
4366 * offset 3475
4367 */
4369 /**
4370 * units: ratio
4371 * offset 3476
4372 */
4373 float triggerVVTGapOverrideFrom[VVT_TRACKING_LENGTH] = {};
4374 /**
4375 * units: ratio
4376 * offset 3492
4377 */
4378 float triggerVVTGapOverrideTo[VVT_TRACKING_LENGTH] = {};
4379 /**
4380 * units: %
4381 * offset 3508
4382 */
4383 int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4384 /**
4385 * If injector duty cycle hits this value, instantly cut fuel.
4386 * units: %
4387 * offset 3544
4388 */
4390 /**
4391 * If injector duty cycle hits this value for the specified delay time, cut fuel.
4392 * units: %
4393 * offset 3545
4394 */
4396 /**
4397 * Timeout period for duty cycle over the sustained limit to trigger duty cycle protection.
4398 * units: sec
4399 * offset 3546
4400 */
4401 scaled_channel<uint8_t, 10, 1> maxInjectorDutySustainedTimeout;
4402 /**
4403 * need 4 byte alignment
4404 * units: units
4405 * offset 3547
4406 */
4407 uint8_t alignmentFill_at_3547[1] = {};
4408 /**
4409 * offset 3548
4410 */
4411 output_pin_e injectionPinsStage2[MAX_CYLINDER_COUNT] = {};
4412 /**
4413 * units: Deg
4414 * offset 3572
4415 */
4416 int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4417 /**
4418 * units: %
4419 * offset 3608
4420 */
4421 int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE] = {};
4422 /**
4423 * offset 3644
4424 */
4426 /**
4427 * offset 3648
4428 */
4430 /**
4431 * offset 3652
4432 */
4434 /**
4435 * offset 3654
4436 */
4438 /**
4439 * offset 3656
4440 */
4442 /**
4443 * offset 3658
4444 */
4446 /**
4447 * offset 3660
4448 */
4450 /**
4451 * offset 3662
4452 */
4454 /**
4455 * offset 3664
4456 */
4458 /**
4459 * offset 3666
4460 */
4462 /**
4463 * offset 3668
4464 */
4466 /**
4467 * offset 3670
4468 */
4470 /**
4471 * offset 3671
4472 */
4474 /**
4475 * offset 3672
4476 */
4478 /**
4479 * offset 3673
4480 */
4482 /**
4483 * offset 3674
4484 */
4486 /**
4487 * offset 3675
4488 */
4490 /**
4491 * offset 3676
4492 */
4494 /**
4495 * offset 3677
4496 */
4498 /**
4499 * need 4 byte alignment
4500 * units: units
4501 * offset 3678
4502 */
4503 uint8_t alignmentFill_at_3678[2] = {};
4504 /**
4505 * Secondary TTL channel baud rate
4506 * units: BPs
4507 * offset 3680
4508 */
4510 /**
4511 * offset 3684
4512 */
4514 /**
4515 * offset 3686
4516 */
4518 /**
4519 * need 4 byte alignment
4520 * units: units
4521 * offset 3687
4522 */
4523 uint8_t alignmentFill_at_3687[1] = {};
4524 /**
4525 * offset 3688
4526 */
4528 /**
4529 * offset 3692
4530 */
4531 uint32_t device_uid[3] = {};
4532 /**
4533 * offset 3704
4534 */
4535 adc_channel_e tcu_rangeAnalogInput[RANGE_INPUT_COUNT] = {};
4536 /**
4537 * need 4 byte alignment
4538 * units: units
4539 * offset 3710
4540 */
4541 uint8_t alignmentFill_at_3710[2] = {};
4542 /**
4543 * units: Ohm
4544 * offset 3712
4545 */
4547 /**
4548 * offset 3716
4549 */
4551 /**
4552 * Nominal coil charge current, 0.25A step
4553 * units: A
4554 * offset 3720
4555 */
4556 scaled_channel<uint8_t, 4, 1> mc33810Nomi;
4557 /**
4558 * Maximum coil charge current, 1A step
4559 * units: A
4560 * offset 3721
4561 */
4563 /**
4564 * need 4 byte alignment
4565 * units: units
4566 * offset 3722
4567 */
4568 uint8_t alignmentFill_at_3722[2] = {};
4569 /**
4570 * offset 3724
4571 */
4573 /**
4574 * value of A/C pressure in kPa before that compressor is disengaged
4575 * units: kPa
4576 * offset 3744
4577 */
4579 /**
4580 * value of A/C pressure in kPa after that compressor is disengaged
4581 * units: kPa
4582 * offset 3746
4583 */
4585 /**
4586 * Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise.
4587 * units: sec
4588 * offset 3748
4589 */
4590 scaled_channel<uint8_t, 10, 1> minimumOilPressureTimeout;
4591 /**
4592 * need 4 byte alignment
4593 * units: units
4594 * offset 3749
4595 */
4596 uint8_t alignmentFill_at_3749[3] = {};
4597 /**
4598 * offset 3752
4599 */
4601 /**
4602 * offset 3772
4603 */
4605 /**
4606 * Below TPS value all knock suppression will be disabled.
4607 * units: %
4608 * offset 3792
4609 */
4610 scaled_channel<uint8_t, 1, 1> knockSuppressMinTps;
4611 /**
4612 * Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),
4613 * units: %
4614 * offset 3793
4615 */
4616 scaled_channel<uint8_t, 10, 1> knockFuelTrimAggression;
4617 /**
4618 * After a knock event, reapply fuel at this rate.
4619 * units: 1%/s
4620 * offset 3794
4621 */
4622 scaled_channel<uint8_t, 10, 1> knockFuelTrimReapplyRate;
4623 /**
4624 * Fuel trim when knock, max 30%
4625 * units: %
4626 * offset 3795
4627 */
4628 scaled_channel<uint8_t, 1, 1> knockFuelTrim;
4629 /**
4630 * units: sense
4631 * offset 3796
4632 */
4634 /**
4635 * "Estimated knock frequency, ignore cylinderBore if this one > 0"
4636 * units: Hz
4637 * offset 3800
4638 */
4640 /**
4641 * None = I have a MAP-referenced fuel pressure regulator
4642 * Fixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)
4643 * Sensed rail pressure = I have a fuel pressure sensor
4644 * offset 3804
4645 */
4647 /**
4648 * need 4 byte alignment
4649 * units: units
4650 * offset 3805
4651 */
4652 uint8_t alignmentFill_at_3805[3] = {};
4653 /**
4654 * This is the pressure at which your injector flow is known.
4655 * For example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here.
4656 * units: kPa
4657 * offset 3808
4658 */
4660 /**
4661 * SENT input connected to ETB
4662 * offset 3812
4663 */
4665 /**
4666 * SENT input used for high pressure fuel sensor
4667 * offset 3813
4668 */
4670 /**
4671 * If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None
4672 * offset 3814
4673 */
4675 /**
4676 * need 4 byte alignment
4677 * units: units
4678 * offset 3815
4679 */
4680 uint8_t alignmentFill_at_3815[1] = {};
4681 /**
4682 offset 3816 bit 0 */
4684 /**
4685 offset 3816 bit 1 */
4686 bool unusedFancy2 : 1 {};
4687 /**
4688 offset 3816 bit 2 */
4689 bool unusedFancy3 : 1 {};
4690 /**
4691 offset 3816 bit 3 */
4692 bool unusedFancy4 : 1 {};
4693 /**
4694 offset 3816 bit 4 */
4695 bool unusedFancy5 : 1 {};
4696 /**
4697 offset 3816 bit 5 */
4698 bool unusedFancy6 : 1 {};
4699 /**
4700 offset 3816 bit 6 */
4701 bool unusedFancy7 : 1 {};
4702 /**
4703 offset 3816 bit 7 */
4704 bool unusedFancy8 : 1 {};
4705 /**
4706 offset 3816 bit 8 */
4707 bool unusedFancy9 : 1 {};
4708 /**
4709 offset 3816 bit 9 */
4710 bool unusedFancy10 : 1 {};
4711 /**
4712 offset 3816 bit 10 */
4713 bool unusedFancy11 : 1 {};
4714 /**
4715 offset 3816 bit 11 */
4716 bool unusedFancy12 : 1 {};
4717 /**
4718 offset 3816 bit 12 */
4719 bool unusedFancy13 : 1 {};
4720 /**
4721 offset 3816 bit 13 */
4722 bool unusedFancy14 : 1 {};
4723 /**
4724 offset 3816 bit 14 */
4725 bool unusedFancy15 : 1 {};
4726 /**
4727 offset 3816 bit 15 */
4728 bool unusedFancy16 : 1 {};
4729 /**
4730 offset 3816 bit 16 */
4731 bool unusedFancy17 : 1 {};
4732 /**
4733 offset 3816 bit 17 */
4734 bool unusedFancy18 : 1 {};
4735 /**
4736 offset 3816 bit 18 */
4737 bool unusedFancy19 : 1 {};
4738 /**
4739 offset 3816 bit 19 */
4740 bool unusedFancy20 : 1 {};
4741 /**
4742 offset 3816 bit 20 */
4743 bool unusedFancy21 : 1 {};
4744 /**
4745 offset 3816 bit 21 */
4746 bool unusedFancy22 : 1 {};
4747 /**
4748 offset 3816 bit 22 */
4749 bool unusedFancy23 : 1 {};
4750 /**
4751 offset 3816 bit 23 */
4752 bool unusedFancy24 : 1 {};
4753 /**
4754 offset 3816 bit 24 */
4755 bool unusedFancy25 : 1 {};
4756 /**
4757 offset 3816 bit 25 */
4758 bool unusedFancy26 : 1 {};
4759 /**
4760 offset 3816 bit 26 */
4761 bool unusedFancy27 : 1 {};
4762 /**
4763 offset 3816 bit 27 */
4764 bool unusedFancy28 : 1 {};
4765 /**
4766 offset 3816 bit 28 */
4767 bool unusedFancy29 : 1 {};
4768 /**
4769 offset 3816 bit 29 */
4770 bool unusedFancy30 : 1 {};
4771 /**
4772 offset 3816 bit 30 */
4773 bool unusedFancy31 : 1 {};
4774 /**
4775 offset 3816 bit 31 */
4776 bool unusedFancy32 : 1 {};
4777 /**
4778 * offset 3820
4779 */
4781 /**
4782 * need 4 byte alignment
4783 * units: units
4784 * offset 3821
4785 */
4786 uint8_t alignmentFill_at_3821[1] = {};
4787 /**
4788 * Pin that activates nitrous control
4789 * offset 3822
4790 */
4792 /**
4793 * offset 3824
4794 */
4796 /**
4797 * offset 3825
4798 */
4800 /**
4801 * offset 3826
4802 */
4804 /**
4805 * need 4 byte alignment
4806 * units: units
4807 * offset 3827
4808 */
4809 uint8_t alignmentFill_at_3827[1] = {};
4810 /**
4811 * offset 3828
4812 */
4814 /**
4815 * offset 3832
4816 */
4818 /**
4819 * units: deg C
4820 * offset 3836
4821 */
4823 /**
4824 * need 4 byte alignment
4825 * units: units
4826 * offset 3837
4827 */
4828 uint8_t alignmentFill_at_3837[1] = {};
4829 /**
4830 * units: kPa
4831 * offset 3838
4832 */
4834 /**
4835 * units: afr
4836 * offset 3840
4837 */
4838 scaled_channel<uint8_t, 10, 1> nitrousMaximumAfr;
4839 /**
4840 * need 4 byte alignment
4841 * units: units
4842 * offset 3841
4843 */
4844 uint8_t alignmentFill_at_3841[1] = {};
4845 /**
4846 * units: rpm
4847 * offset 3842
4848 */
4850 /**
4851 * units: rpm
4852 * offset 3844
4853 */
4855 /**
4856 * units: rpm
4857 * offset 3846
4858 */
4860 /**
4861 * 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.
4862 * units: deg
4863 * offset 3848
4864 */
4866 /**
4867 * Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified.
4868 * units: s
4869 * offset 3849
4870 */
4871 scaled_channel<uint8_t, 10, 1> dfcoRetardRampInTime;
4872 /**
4873 * offset 3850
4874 */
4876 /**
4877 * offset 3852
4878 */
4880 /**
4881 * units: %
4882 * offset 3853
4883 */
4885 /**
4886 * need 4 byte alignment
4887 * units: units
4888 * offset 3854
4889 */
4890 uint8_t alignmentFill_at_3854[2] = {};
4891 /**
4892 * Retard timing to remove from actual final timing (after all corrections) due to additional air.
4893 * units: deg
4894 * offset 3856
4895 */
4897 /**
4898 * units: Kph
4899 * offset 3860
4900 */
4902 /**
4903 * need 4 byte alignment
4904 * units: units
4905 * offset 3862
4906 */
4907 uint8_t alignmentFill_at_3862[2] = {};
4908 /**
4909 * Exponential Average Alpha filtering parameter
4910 * offset 3864
4911 */
4913 /**
4914 * How often do we update fuel level gauge
4915 * units: seconds
4916 * offset 3868
4917 */
4919 /**
4920 * Error below specified value
4921 * units: v
4922 * offset 3872
4923 */
4925 /**
4926 * Error above specified value
4927 * units: v
4928 * offset 3876
4929 */
4931 /**
4932 * offset 3880
4933 */
4935 /**
4936 * Compensates for trigger delay due to belt stretch, or other electromechanical issues. beware that raising this value advances ignition timing!
4937 * units: uS
4938 * offset 3884
4939 */
4940 scaled_channel<uint8_t, 1, 1> sparkHardwareLatencyCorrection;
4941 /**
4942 * Delay before cutting fuel due to extra high oil pressure. Use this to ignore short pressure blips and sensor noise.
4943 * units: sec
4944 * offset 3885
4945 */
4946 scaled_channel<uint8_t, 10, 1> maxOilPressureTimeout;
4947 /**
4948 * units: kg/h
4949 * offset 3886
4950 */
4951 scaled_channel<uint16_t, 100, 1> idleFlowEstimateFlow[8] = {};
4952 /**
4953 * units: %
4954 * offset 3902
4955 */
4956 scaled_channel<uint8_t, 2, 1> idleFlowEstimatePosition[8] = {};
4957 /**
4958 * units: mg
4959 * offset 3910
4960 */
4961 int8_t airmassToTimingBins[8] = {};
4962 /**
4963 * units: deg
4964 * offset 3918
4965 */
4967 /**
4968 * idle return target ramp duration
4969 * units: seconds
4970 * offset 3926
4971 */
4972 scaled_channel<uint8_t, 10, 1> idleReturnTargetRampDuration;
4973 /**
4974 * units: units
4975 * offset 3927
4976 */
4977 uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING] = {};
4978};
4979static_assert(sizeof(engine_configuration_s) == 3980);
4980
4981// start of ign_cyl_trim_s
4983 /**
4984 * offset 0
4985 */
4986 scaled_channel<int8_t, 5, 1> table[IGN_TRIM_SIZE][IGN_TRIM_SIZE] = {};
4987};
4988static_assert(sizeof(ign_cyl_trim_s) == 16);
4989
4990// start of fuel_cyl_trim_s
4992 /**
4993 * offset 0
4994 */
4995 scaled_channel<int8_t, 5, 1> table[FUEL_TRIM_SIZE][FUEL_TRIM_SIZE] = {};
4996};
4997static_assert(sizeof(fuel_cyl_trim_s) == 16);
4998
4999// start of blend_table_s
5001 /**
5002 * offset 0
5003 */
5004 scaled_channel<int16_t, 10, 1> table[BLEND_TABLE_COUNT][BLEND_TABLE_COUNT] = {};
5005 /**
5006 * units: Load
5007 * offset 128
5008 */
5009 uint16_t loadBins[BLEND_TABLE_COUNT] = {};
5010 /**
5011 * units: RPM
5012 * offset 144
5013 */
5014 uint16_t rpmBins[BLEND_TABLE_COUNT] = {};
5015 /**
5016 * offset 160
5017 */
5019 /**
5020 * offset 161
5021 */
5023 /**
5024 * offset 162
5025 */
5026 scaled_channel<int16_t, 10, 1> blendBins[BLEND_FACTOR_SIZE] = {};
5027 /**
5028 * units: %
5029 * offset 178
5030 */
5031 scaled_channel<uint8_t, 2, 1> blendValues[BLEND_FACTOR_SIZE] = {};
5032 /**
5033 * need 4 byte alignment
5034 * units: units
5035 * offset 186
5036 */
5037 uint8_t alignmentFill_at_186[2] = {};
5038};
5039static_assert(sizeof(blend_table_s) == 188);
5040
5041// start of persistent_config_s
5043 /**
5044 * offset 0
5045 */
5047 /**
5048 * offset 3980
5049 */
5050 float tmfTable[TMF_SIZE][TMF_SIZE] = {};
5051 /**
5052 * offset 3996
5053 */
5054 float tmfRatioBins[TMF_SIZE] = {};
5055 /**
5056 * offset 4004
5057 */
5058 float tmfOpeningBins[TMF_SIZE] = {};
5059 /**
5060 * units: Nm
5061 * offset 4012
5062 */
5063 scaled_channel<uint8_t, 1, 10> torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE] = {};
5064 /**
5065 * units: RPM
5066 * offset 4048
5067 */
5068 uint16_t torqueRpmBins[TORQUE_CURVE_SIZE] = {};
5069 /**
5070 * units: Load
5071 * offset 4060
5072 */
5073 uint16_t torqueLoadBins[TORQUE_CURVE_SIZE] = {};
5074 /**
5075 * units: mult
5076 * offset 4072
5077 */
5078 float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT] = {};
5079 /**
5080 * units: count
5081 * offset 4216
5082 */
5083 uint16_t postCrankingDurationBins[CRANKING_ENRICH_COUNT] = {};
5084 /**
5085 * units: C
5086 * offset 4228
5087 */
5088 int16_t postCrankingCLTBins[CRANKING_ENRICH_COUNT] = {};
5089 /**
5090 * target TPS value, 0 to 100%
5091 * TODO: use int8 data date once we template interpolation method
5092 * units: target TPS position
5093 * offset 4240
5094 */
5095 float etbBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
5096 /**
5097 * PWM bias, open loop component of PID closed loop control
5098 * units: ETB duty cycle bias
5099 * offset 4272
5100 */
5101 float etbBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5102 /**
5103 * target Wastegate value, 0 to 100%
5104 * units: target DC position
5105 * offset 4304
5106 */
5107 int8_t dcWastegateBiasBins[ETB_BIAS_CURVE_LENGTH] = {};
5108 /**
5109 * PWM bias, open loop component of PID closed loop control
5110 * units: DC wastegate duty cycle bias
5111 * offset 4312
5112 */
5113 scaled_channel<int16_t, 100, 1> dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH] = {};
5114 /**
5115 * units: %
5116 * offset 4328
5117 */
5118 scaled_channel<uint8_t, 20, 1> iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE] = {};
5119 /**
5120 * units: Load
5121 * offset 4392
5122 */
5123 uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE] = {};
5124 /**
5125 * units: RPM
5126 * offset 4400
5127 */
5128 scaled_channel<uint8_t, 1, 10> iacPidMultRpmBins[IAC_PID_MULT_SIZE] = {};
5129 /**
5130 * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM
5131 * units: RPM
5132 * offset 4408
5133 */
5134 uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE] = {};
5135 /**
5136 * units: ms
5137 * offset 4424
5138 */
5139 scaled_channel<uint16_t, 100, 1> sparkDwellValues[DWELL_CURVE_SIZE] = {};
5140 /**
5141 * CLT-based target RPM for automatic idle controller
5142 * units: C
5143 * offset 4440
5144 */
5145 scaled_channel<int8_t, 1, 2> cltIdleRpmBins[CLT_CURVE_SIZE] = {};
5146 /**
5147 * See idleRpmPid
5148 * units: RPM
5149 * offset 4456
5150 */
5151 scaled_channel<uint8_t, 1, 20> cltIdleRpm[CLT_CURVE_SIZE] = {};
5152 /**
5153 * units: deg
5154 * offset 4472
5155 */
5156 scaled_channel<int16_t, 10, 1> ignitionCltCorrTable[CLT_TIMING_CURVE_SIZE][CLT_TIMING_CURVE_SIZE] = {};
5157 /**
5158 * CLT-based timing correction
5159 * units: C
5160 * offset 4522
5161 */
5162 scaled_channel<int8_t, 1, 5> ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE] = {};
5163 /**
5164 * units: Load
5165 * offset 4527
5166 */
5167 scaled_channel<uint8_t, 1, 5> ignitionCltCorrLoadBins[CLT_TIMING_CURVE_SIZE] = {};
5168 /**
5169 * units: x
5170 * offset 4532
5171 */
5172 float scriptCurve1Bins[SCRIPT_CURVE_16] = {};
5173 /**
5174 * units: y
5175 * offset 4596
5176 */
5177 float scriptCurve1[SCRIPT_CURVE_16] = {};
5178 /**
5179 * units: x
5180 * offset 4660
5181 */
5182 float scriptCurve2Bins[SCRIPT_CURVE_16] = {};
5183 /**
5184 * units: y
5185 * offset 4724
5186 */
5187 float scriptCurve2[SCRIPT_CURVE_16] = {};
5188 /**
5189 * units: x
5190 * offset 4788
5191 */
5192 float scriptCurve3Bins[SCRIPT_CURVE_8] = {};
5193 /**
5194 * units: y
5195 * offset 4820
5196 */
5197 float scriptCurve3[SCRIPT_CURVE_8] = {};
5198 /**
5199 * units: x
5200 * offset 4852
5201 */
5202 float scriptCurve4Bins[SCRIPT_CURVE_8] = {};
5203 /**
5204 * units: y
5205 * offset 4884
5206 */
5207 float scriptCurve4[SCRIPT_CURVE_8] = {};
5208 /**
5209 * units: x
5210 * offset 4916
5211 */
5212 float scriptCurve5Bins[SCRIPT_CURVE_8] = {};
5213 /**
5214 * units: y
5215 * offset 4948
5216 */
5217 float scriptCurve5[SCRIPT_CURVE_8] = {};
5218 /**
5219 * units: x
5220 * offset 4980
5221 */
5222 float scriptCurve6Bins[SCRIPT_CURVE_8] = {};
5223 /**
5224 * units: y
5225 * offset 5012
5226 */
5227 float scriptCurve6[SCRIPT_CURVE_8] = {};
5228 /**
5229 * units: kPa
5230 * offset 5044
5231 */
5232 float baroCorrPressureBins[BARO_CORR_SIZE] = {};
5233 /**
5234 * units: RPM
5235 * offset 5060
5236 */
5237 float baroCorrRpmBins[BARO_CORR_SIZE] = {};
5238 /**
5239 * units: ratio
5240 * offset 5076
5241 */
5242 float baroCorrTable[BARO_CORR_SIZE][BARO_CORR_SIZE] = {};
5243 /**
5244 * Cranking fuel correction coefficient based on TPS
5245 * units: Ratio
5246 * offset 5140
5247 */
5248 float crankingTpsCoef[CRANKING_CURVE_SIZE] = {};
5249 /**
5250 * units: %
5251 * offset 5172
5252 */
5253 float crankingTpsBins[CRANKING_CURVE_SIZE] = {};
5254 /**
5255 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5256 * units: RPM
5257 * offset 5204
5258 */
5259 uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE] = {};
5260 /**
5261 * Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
5262 * units: deg
5263 * offset 5212
5264 */
5265 scaled_channel<int16_t, 100, 1> crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE] = {};
5266 /**
5267 * RPM-based idle position for coasting
5268 * units: RPM
5269 * offset 5220
5270 */
5271 scaled_channel<uint8_t, 1, 100> iacCoastingRpmBins[CLT_CURVE_SIZE] = {};
5272 /**
5273 * RPM-based idle position for coasting
5274 * units: %
5275 * offset 5236
5276 */
5277 scaled_channel<uint8_t, 2, 1> iacCoasting[CLT_CURVE_SIZE] = {};
5278 /**
5279 * offset 5252
5280 */
5281 scaled_channel<uint8_t, 2, 1> boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5282 /**
5283 * units: RPM
5284 * offset 5316
5285 */
5286 scaled_channel<uint8_t, 1, 100> boostRpmBins[BOOST_RPM_COUNT] = {};
5287 /**
5288 * offset 5324
5289 */
5290 uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT] = {};
5291 /**
5292 * offset 5340
5293 */
5294 scaled_channel<uint8_t, 1, 2> boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT] = {};
5295 /**
5296 * offset 5404
5297 */
5298 uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT] = {};
5299 /**
5300 * units: %
5301 * offset 5420
5302 */
5303 uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE] = {};
5304 /**
5305 * units: %
5306 * offset 5484
5307 */
5308 uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE] = {};
5309 /**
5310 * units: RPM
5311 * offset 5492
5312 */
5313 scaled_channel<uint8_t, 1, 100> pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE] = {};
5314 /**
5315 * CLT-based cranking position % for simple manual idle controller
5316 * units: C
5317 * offset 5500
5318 */
5319 float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE] = {};
5320 /**
5321 * CLT-based cranking position % for simple manual idle controller
5322 * units: percent
5323 * offset 5532
5324 */
5325 float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE] = {};
5326 /**
5327 * units: C
5328 * offset 5564
5329 */
5330 float afterCrankingIACtaperDurationBins[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
5331 /**
5332 * 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.
5333 * Should be 100 once tune is better
5334 * units: cycles
5335 * offset 5588
5336 */
5337 uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE] = {};
5338 /**
5339 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5340 * units: RPM
5341 * offset 5600
5342 */
5343 scaled_channel<uint8_t, 1, 50> idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE] = {};
5344 /**
5345 * Optional timing advance table for Idle (see useSeparateAdvanceForIdle)
5346 * units: deg
5347 * offset 5608
5348 */
5349 float idleAdvance[IDLE_ADVANCE_CURVE_SIZE] = {};
5350 /**
5351 * units: RPM
5352 * offset 5640
5353 */
5354 scaled_channel<uint8_t, 1, 10> idleVeRpmBins[IDLE_VE_SIZE] = {};
5355 /**
5356 * units: load
5357 * offset 5644
5358 */
5359 uint8_t idleVeLoadBins[IDLE_VE_SIZE] = {};
5360 /**
5361 * units: %
5362 * offset 5648
5363 */
5364 scaled_channel<uint16_t, 10, 1> idleVeTable[IDLE_VE_SIZE][IDLE_VE_SIZE] = {};
5365 /**
5366 * offset 5680
5367 */
5369 /**
5370 * units: C
5371 * offset 13680
5372 */
5373 float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE] = {};
5374 /**
5375 * units: ratio
5376 * offset 13744
5377 */
5378 float cltFuelCorr[CLT_FUEL_CURVE_SIZE] = {};
5379 /**
5380 * units: C
5381 * offset 13808
5382 */
5383 float iatFuelCorrBins[IAT_CURVE_SIZE] = {};
5384 /**
5385 * units: ratio
5386 * offset 13872
5387 */
5388 float iatFuelCorr[IAT_CURVE_SIZE] = {};
5389 /**
5390 * units: ratio
5391 * offset 13936
5392 */
5393 float crankingFuelCoef[CRANKING_CURVE_SIZE] = {};
5394 /**
5395 * units: C
5396 * offset 13968
5397 */
5398 float crankingFuelBins[CRANKING_CURVE_SIZE] = {};
5399 /**
5400 * units: counter
5401 * offset 14000
5402 */
5403 float crankingCycleBins[CRANKING_CURVE_SIZE] = {};
5404 /**
5405 * units: C
5406 * offset 14032
5407 */
5408 int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE] = {};
5409 /**
5410 * units: mult
5411 * offset 14040
5412 */
5413 float crankingCycleFuelCoef[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE] = {};
5414 /**
5415 * CLT-based idle position for simple manual idle controller
5416 * units: C
5417 * offset 14168
5418 */
5419 float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE] = {};
5420 /**
5421 * CLT-based idle position for simple manual idle controller
5422 * units: %
5423 * offset 14200
5424 */
5425 float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE] = {};
5426 /**
5427 * units: RPM
5428 * offset 14264
5429 */
5430 scaled_channel<uint8_t, 1, 100> rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE] = {};
5431 /**
5432 * need 4 byte alignment
5433 * units: units
5434 * offset 14266
5435 */
5436 uint8_t alignmentFill_at_14266[2] = {};
5437 /**
5438 * Also known as MAF transfer function.
5439 * kg/hour value.
5440 * By the way 2.081989116 kg/h = 1 ft3/m
5441 * units: kg/hour
5442 * offset 14268
5443 */
5444 float mafDecoding[MAF_DECODING_COUNT] = {};
5445 /**
5446 * units: V
5447 * offset 14396
5448 */
5449 float mafDecodingBins[MAF_DECODING_COUNT] = {};
5450 /**
5451 * units: deg
5452 * offset 14524
5453 */
5454 scaled_channel<int16_t, 10, 1> ignitionIatCorrTable[IAT_IGN_CORR_COUNT][IAT_IGN_CORR_COUNT] = {};
5455 /**
5456 * units: C
5457 * offset 14652
5458 */
5459 int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_COUNT] = {};
5460 /**
5461 * units: Load
5462 * offset 14660
5463 */
5464 scaled_channel<uint8_t, 1, 5> ignitionIatCorrLoadBins[IAT_IGN_CORR_COUNT] = {};
5465 /**
5466 * units: deg
5467 * offset 14668
5468 */
5469 int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT] = {};
5470 /**
5471 * units: Load
5472 * offset 15180
5473 */
5474 uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT] = {};
5475 /**
5476 * units: RPM
5477 * offset 15212
5478 */
5479 uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT] = {};
5480 /**
5481 * units: onoff
5482 * offset 15244
5483 */
5484 uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT] = {};
5485 /**
5486 * units: kPa
5487 * offset 15304
5488 */
5489 scaled_channel<uint16_t, 100, 1> mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT] = {};
5490 /**
5491 * units: % TPS
5492 * offset 15816
5493 */
5494 scaled_channel<uint16_t, 100, 1> mapEstimateTpsBins[MAP_EST_LOAD_COUNT] = {};
5495 /**
5496 * units: RPM
5497 * offset 15848
5498 */
5499 uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT] = {};
5500 /**
5501 * units: value
5502 * offset 15880
5503 */
5504 int8_t vvtTable1[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5505 /**
5506 * units: L
5507 * offset 15944
5508 */
5509 uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE] = {};
5510 /**
5511 * units: RPM
5512 * offset 15960
5513 */
5514 uint16_t vvtTable1RpmBins[VVT_TABLE_SIZE] = {};
5515 /**
5516 * units: value
5517 * offset 15976
5518 */
5519 int8_t vvtTable2[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = {};
5520 /**
5521 * units: L
5522 * offset 16040
5523 */
5524 uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE] = {};
5525 /**
5526 * units: RPM
5527 * offset 16056
5528 */
5529 uint16_t vvtTable2RpmBins[VVT_TABLE_SIZE] = {};
5530 /**
5531 * units: deg
5532 * offset 16072
5533 */
5534 scaled_channel<int16_t, 10, 1> ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT] = {};
5535 /**
5536 * units: Load
5537 * offset 16584
5538 */
5539 uint16_t ignitionLoadBins[IGN_LOAD_COUNT] = {};
5540 /**
5541 * units: RPM
5542 * offset 16616
5543 */
5544 uint16_t ignitionRpmBins[IGN_RPM_COUNT] = {};
5545 /**
5546 * units: %
5547 * offset 16648
5548 */
5549 scaled_channel<uint16_t, 10, 1> veTable[VE_LOAD_COUNT][VE_RPM_COUNT] = {};
5550 /**
5551 * units: {bitStringValue(fuelUnits, fuelAlgorithm) }
5552 * offset 17160
5553 */
5554 uint16_t veLoadBins[VE_LOAD_COUNT] = {};
5555 /**
5556 * units: RPM
5557 * offset 17192
5558 */
5559 uint16_t veRpmBins[VE_RPM_COUNT] = {};
5560 /**
5561 * units: lambda
5562 * offset 17224
5563 */
5564 scaled_channel<uint8_t, 147, 1> lambdaTable[FUEL_LOAD_COUNT][FUEL_RPM_COUNT] = {};
5565 /**
5566 * offset 17480
5567 */
5568 uint16_t lambdaLoadBins[FUEL_LOAD_COUNT] = {};
5569 /**
5570 * units: RPM
5571 * offset 17512
5572 */
5573 uint16_t lambdaRpmBins[FUEL_RPM_COUNT] = {};
5574 /**
5575 * units: value
5576 * offset 17544
5577 */
5578 float tpsTpsAccelTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = {};
5579 /**
5580 * units: from
5581 * offset 17800
5582 */
5583 float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE] = {};
5584 /**
5585 * units: to
5586 * offset 17832
5587 */
5588 float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE] = {};
5589 /**
5590 * units: value
5591 * offset 17864
5592 */
5593 float scriptTable1[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
5594 /**
5595 * units: L
5596 * offset 18120
5597 */
5598 int16_t scriptTable1LoadBins[SCRIPT_TABLE_8] = {};
5599 /**
5600 * units: RPM
5601 * offset 18136
5602 */
5603 int16_t scriptTable1RpmBins[SCRIPT_TABLE_8] = {};
5604 /**
5605 * units: value
5606 * offset 18152
5607 */
5608 float scriptTable2[TABLE_2_LOAD_SIZE][TABLE_2_RPM_SIZE] = {};
5609 /**
5610 * units: L
5611 * offset 18408
5612 */
5613 int16_t scriptTable2LoadBins[TABLE_2_LOAD_SIZE] = {};
5614 /**
5615 * units: RPM
5616 * offset 18424
5617 */
5618 int16_t scriptTable2RpmBins[TABLE_2_RPM_SIZE] = {};
5619 /**
5620 * units: value
5621 * offset 18440
5622 */
5623 uint8_t scriptTable3[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = {};
5624 /**
5625 * units: L
5626 * offset 18504
5627 */
5628 int16_t scriptTable3LoadBins[SCRIPT_TABLE_8] = {};
5629 /**
5630 * units: RPM
5631 * offset 18520
5632 */
5633 int16_t scriptTable3RpmBins[SCRIPT_TABLE_8] = {};
5634 /**
5635 * units: value
5636 * offset 18536
5637 */
5638 uint8_t scriptTable4[SCRIPT_TABLE_8][TABLE_4_RPM] = {};
5639 /**
5640 * units: L
5641 * offset 18616
5642 */
5643 int16_t scriptTable4LoadBins[SCRIPT_TABLE_8] = {};
5644 /**
5645 * units: RPM
5646 * offset 18632
5647 */
5648 int16_t scriptTable4RpmBins[TABLE_4_RPM] = {};
5649 /**
5650 * offset 18652
5651 */
5652 uint16_t ignTrimLoadBins[IGN_TRIM_SIZE] = {};
5653 /**
5654 * units: rpm
5655 * offset 18660
5656 */
5657 uint16_t ignTrimRpmBins[IGN_TRIM_SIZE] = {};
5658 /**
5659 * offset 18668
5660 */
5662 /**
5663 * offset 18860
5664 */
5665 uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE] = {};
5666 /**
5667 * units: rpm
5668 * offset 18868
5669 */
5670 uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE] = {};
5671 /**
5672 * offset 18876
5673 */
5675 /**
5676 * units: ratio
5677 * offset 19068
5678 */
5679 scaled_channel<uint16_t, 100, 1> crankingFuelCoefE100[CRANKING_CURVE_SIZE] = {};
5680 /**
5681 * units: Airmass
5682 * offset 19084
5683 */
5684 scaled_channel<uint8_t, 1, 5> tcu_pcAirmassBins[TCU_TABLE_WIDTH] = {};
5685 /**
5686 * units: %
5687 * offset 19092
5688 */
5689 uint8_t tcu_pcValsR[TCU_TABLE_WIDTH] = {};
5690 /**
5691 * units: %
5692 * offset 19100
5693 */
5694 uint8_t tcu_pcValsN[TCU_TABLE_WIDTH] = {};
5695 /**
5696 * units: %
5697 * offset 19108
5698 */
5699 uint8_t tcu_pcVals1[TCU_TABLE_WIDTH] = {};
5700 /**
5701 * units: %
5702 * offset 19116
5703 */
5704 uint8_t tcu_pcVals2[TCU_TABLE_WIDTH] = {};
5705 /**
5706 * units: %
5707 * offset 19124
5708 */
5709 uint8_t tcu_pcVals3[TCU_TABLE_WIDTH] = {};
5710 /**
5711 * units: %
5712 * offset 19132
5713 */
5714 uint8_t tcu_pcVals4[TCU_TABLE_WIDTH] = {};
5715 /**
5716 * units: %
5717 * offset 19140
5718 */
5719 uint8_t tcu_pcVals12[TCU_TABLE_WIDTH] = {};
5720 /**
5721 * units: %
5722 * offset 19148
5723 */
5724 uint8_t tcu_pcVals23[TCU_TABLE_WIDTH] = {};
5725 /**
5726 * units: %
5727 * offset 19156
5728 */
5729 uint8_t tcu_pcVals34[TCU_TABLE_WIDTH] = {};
5730 /**
5731 * units: %
5732 * offset 19164
5733 */
5734 uint8_t tcu_pcVals21[TCU_TABLE_WIDTH] = {};
5735 /**
5736 * units: %
5737 * offset 19172
5738 */
5739 uint8_t tcu_pcVals32[TCU_TABLE_WIDTH] = {};
5740 /**
5741 * units: %
5742 * offset 19180
5743 */
5744 uint8_t tcu_pcVals43[TCU_TABLE_WIDTH] = {};
5745 /**
5746 * units: TPS
5747 * offset 19188
5748 */
5749 uint8_t tcu_tccTpsBins[8] = {};
5750 /**
5751 * units: MPH
5752 * offset 19196
5753 */
5754 uint8_t tcu_tccLockSpeed[8] = {};
5755 /**
5756 * units: MPH
5757 * offset 19204
5758 */
5759 uint8_t tcu_tccUnlockSpeed[8] = {};
5760 /**
5761 * units: KPH
5762 * offset 19212
5763 */
5764 uint8_t tcu_32SpeedBins[8] = {};
5765 /**
5766 * units: %
5767 * offset 19220
5768 */
5769 uint8_t tcu_32Vals[8] = {};
5770 /**
5771 * units: %
5772 * offset 19228
5773 */
5774 scaled_channel<int8_t, 10, 1> throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE] = {};
5775 /**
5776 * units: %
5777 * offset 19264
5778 */
5779 uint8_t throttle2TrimTpsBins[ETB2_TRIM_SIZE] = {};
5780 /**
5781 * units: RPM
5782 * offset 19270
5783 */
5784 scaled_channel<uint8_t, 1, 100> throttle2TrimRpmBins[ETB2_TRIM_SIZE] = {};
5785 /**
5786 * units: deg
5787 * offset 19276
5788 */
5789 scaled_channel<uint8_t, 4, 1> maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE] = {};
5790 /**
5791 * units: %
5792 * offset 19312
5793 */
5794 uint8_t maxKnockRetardLoadBins[KNOCK_TABLE_SIZE] = {};
5795 /**
5796 * units: RPM
5797 * offset 19318
5798 */
5799 scaled_channel<uint8_t, 1, 100> maxKnockRetardRpmBins[KNOCK_TABLE_SIZE] = {};
5800 /**
5801 * units: deg
5802 * offset 19324
5803 */
5804 scaled_channel<int16_t, 10, 1> ALSTimingRetardTable[ALS_SIZE][ALS_SIZE] = {};
5805 /**
5806 * units: TPS
5807 * offset 19356
5808 */
5809 uint16_t alsIgnRetardLoadBins[ALS_SIZE] = {};
5810 /**
5811 * units: RPM
5812 * offset 19364
5813 */
5814 uint16_t alsIgnRetardrpmBins[ALS_SIZE] = {};
5815 /**
5816 * units: percent
5817 * offset 19372
5818 */
5819 scaled_channel<int16_t, 10, 1> ALSFuelAdjustment[ALS_SIZE][ALS_SIZE] = {};
5820 /**
5821 * units: TPS
5822 * offset 19404
5823 */
5824 uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE] = {};
5825 /**
5826 * units: RPM
5827 * offset 19412
5828 */
5829 uint16_t alsFuelAdjustmentrpmBins[ALS_SIZE] = {};
5830 /**
5831 * units: ratio
5832 * offset 19420
5833 */
5834 scaled_channel<int16_t, 1, 10> ALSIgnSkipTable[ALS_SIZE][ALS_SIZE] = {};
5835 /**
5836 * units: TPS
5837 * offset 19452
5838 */
5839 uint16_t alsIgnSkipLoadBins[ALS_SIZE] = {};
5840 /**
5841 * units: RPM
5842 * offset 19460
5843 */
5844 uint16_t alsIgnSkiprpmBins[ALS_SIZE] = {};
5845 /**
5846 * offset 19468
5847 */
5848 blend_table_s ignBlends[IGN_BLEND_COUNT] = {};
5849 /**
5850 * offset 20220
5851 */
5852 blend_table_s veBlends[VE_BLEND_COUNT] = {};
5853 /**
5854 * units: %
5855 * offset 20972
5856 */
5857 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaBins[THR_EST_SIZE] = {};
5858 /**
5859 * In units of g/s normalized to choked flow conditions
5860 * units: g/s
5861 * offset 20996
5862 */
5863 scaled_channel<uint16_t, 10, 1> throttleEstimateEffectiveAreaValues[THR_EST_SIZE] = {};
5864 /**
5865 * offset 21020
5866 */
5867 blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT] = {};
5868 /**
5869 * offset 21396
5870 */
5871 blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT] = {};
5872 /**
5873 * units: level
5874 * offset 21772
5875 */
5876 float tcu_rangeP[RANGE_INPUT_COUNT] = {};
5877 /**
5878 * units: level
5879 * offset 21796
5880 */
5881 float tcu_rangeR[RANGE_INPUT_COUNT] = {};
5882 /**
5883 * units: level
5884 * offset 21820
5885 */
5886 float tcu_rangeN[RANGE_INPUT_COUNT] = {};
5887 /**
5888 * units: level
5889 * offset 21844
5890 */
5891 float tcu_rangeD[RANGE_INPUT_COUNT] = {};
5892 /**
5893 * units: level
5894 * offset 21868
5895 */
5896 float tcu_rangeM[RANGE_INPUT_COUNT] = {};
5897 /**
5898 * units: level
5899 * offset 21892
5900 */
5901 float tcu_rangeM3[RANGE_INPUT_COUNT] = {};
5902 /**
5903 * units: level
5904 * offset 21916
5905 */
5906 float tcu_rangeM2[RANGE_INPUT_COUNT] = {};
5907 /**
5908 * units: level
5909 * offset 21940
5910 */
5911 float tcu_rangeM1[RANGE_INPUT_COUNT] = {};
5912 /**
5913 * units: level
5914 * offset 21964
5915 */
5916 float tcu_rangePlus[RANGE_INPUT_COUNT] = {};
5917 /**
5918 * units: level
5919 * offset 21988
5920 */
5921 float tcu_rangeMinus[RANGE_INPUT_COUNT] = {};
5922 /**
5923 * units: level
5924 * offset 22012
5925 */
5926 float tcu_rangeLow[RANGE_INPUT_COUNT] = {};
5927 /**
5928 * units: lambda
5929 * offset 22036
5930 */
5931 scaled_channel<uint8_t, 100, 1> lambdaMaxDeviationTable[LAM_SIZE][LAM_SIZE] = {};
5932 /**
5933 * offset 22052
5934 */
5935 uint16_t lambdaMaxDeviationLoadBins[LAM_SIZE] = {};
5936 /**
5937 * units: RPM
5938 * offset 22060
5939 */
5940 uint16_t lambdaMaxDeviationRpmBins[LAM_SIZE] = {};
5941 /**
5942 * units: %
5943 * offset 22068
5944 */
5945 uint8_t injectorStagingTable[INJ_STAGING_COUNT][INJ_STAGING_COUNT] = {};
5946 /**
5947 * offset 22104
5948 */
5949 uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT] = {};
5950 /**
5951 * units: RPM
5952 * offset 22116
5953 */
5954 uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT] = {};
5955 /**
5956 * units: deg C
5957 * offset 22128
5958 */
5959 int8_t wwCltBins[WWAE_TABLE_SIZE] = {};
5960 /**
5961 * offset 22136
5962 */
5963 scaled_channel<uint8_t, 100, 1> wwTauCltValues[WWAE_TABLE_SIZE] = {};
5964 /**
5965 * offset 22144
5966 */
5967 scaled_channel<uint8_t, 100, 1> wwBetaCltValues[WWAE_TABLE_SIZE] = {};
5968 /**
5969 * units: kPa
5970 * offset 22152
5971 */
5972 uint8_t wwMapBins[WWAE_TABLE_SIZE] = {};
5973 /**
5974 * offset 22160
5975 */
5976 scaled_channel<uint8_t, 100, 1> wwTauMapValues[WWAE_TABLE_SIZE] = {};
5977 /**
5978 * offset 22168
5979 */
5980 scaled_channel<uint8_t, 100, 1> wwBetaMapValues[WWAE_TABLE_SIZE] = {};
5981 /**
5982 * units: %
5983 * offset 22176
5984 */
5985 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE] = {};
5986 /**
5987 * units: deg
5988 * offset 22192
5989 */
5990 scaled_channel<uint8_t, 2, 1> hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE] = {};
5991 /**
5992 * units: volts
5993 * offset 22208
5994 */
5995 uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE] = {};
5996 /**
5997 * units: ms
5998 * offset 22216
5999 */
6000 scaled_channel<uint16_t, 1000, 1> hpfpDeadtimeMS[HPFP_DEADTIME_SIZE] = {};
6001 /**
6002 * units: kPa
6003 * offset 22232
6004 */
6005 uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE] = {};
6006 /**
6007 * units: load
6008 * offset 22432
6009 */
6010 scaled_channel<uint16_t, 10, 1> hpfpTargetLoadBins[HPFP_TARGET_SIZE] = {};
6011 /**
6012 * units: RPM
6013 * offset 22452
6014 */
6015 scaled_channel<uint8_t, 1, 50> hpfpTargetRpmBins[HPFP_TARGET_SIZE] = {};
6016 /**
6017 * units: %
6018 * offset 22462
6019 */
6020 int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE] = {};
6021 /**
6022 * units: cc/lobe
6023 * offset 22562
6024 */
6025 scaled_channel<uint16_t, 1000, 1> hpfpCompensationLoadBins[HPFP_COMPENSATION_SIZE] = {};
6026 /**
6027 * units: RPM
6028 * offset 22582
6029 */
6030 scaled_channel<uint8_t, 1, 50> hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE] = {};
6031 /**
6032 * units: %
6033 * offset 22592
6034 */
6035 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6036 /**
6037 * units: fuel mass/mg
6038 * offset 22720
6039 */
6040 scaled_channel<uint16_t, 100, 1> hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6041 /**
6042 * units: bar
6043 * offset 22736
6044 */
6045 scaled_channel<uint32_t, 10, 1> hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE] = {};
6046 /**
6047 * units: RPM
6048 * offset 22768
6049 */
6050 uint16_t knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE] = {};
6051 /**
6052 * Knock sensor output knock detection threshold depending on current RPM.
6053 * units: dB
6054 * offset 22800
6055 */
6056 scaled_channel<int8_t, 2, 1> knockBaseNoise[ENGINE_NOISE_CURVE_SIZE] = {};
6057 /**
6058 * units: RPM
6059 * offset 22816
6060 */
6061 scaled_channel<uint8_t, 1, 50> tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6062 /**
6063 * units: multiplier
6064 * offset 22820
6065 */
6066 scaled_channel<uint8_t, 50, 1> tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE] = {};
6067 /**
6068 * units: C
6069 * offset 22824
6070 */
6071 scaled_channel<int8_t, 1, 5> cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE] = {};
6072 /**
6073 * units: RPM
6074 * offset 22828
6075 */
6076 uint16_t cltRevLimitRpm[CLT_LIMITER_CURVE_SIZE] = {};
6077 /**
6078 * units: volt
6079 * offset 22836
6080 */
6081 scaled_channel<uint16_t, 1000, 1> fuelLevelBins[FUEL_LEVEL_TABLE_COUNT] = {};
6082 /**
6083 * units: %
6084 * offset 22852
6085 */
6086 uint8_t fuelLevelValues[FUEL_LEVEL_TABLE_COUNT] = {};
6087 /**
6088 * units: volts
6089 * offset 22860
6090 */
6091 scaled_channel<uint8_t, 10, 1> dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE] = {};
6092 /**
6093 * units: multiplier
6094 * offset 22868
6095 */
6096 scaled_channel<uint8_t, 50, 1> dwellVoltageCorrValues[DWELL_CURVE_SIZE] = {};
6097 /**
6098 * units: %
6099 * offset 22876
6100 */
6101 scaled_channel<uint8_t, 1, 1> tcu_shiftTpsBins[TCU_TABLE_WIDTH] = {};
6102 /**
6103 * units: MPH
6104 * offset 22884
6105 */
6106 uint8_t tcu_shiftSpeed12[TCU_TABLE_WIDTH] = {};
6107 /**
6108 * units: MPH
6109 * offset 22892
6110 */
6111 uint8_t tcu_shiftSpeed23[TCU_TABLE_WIDTH] = {};
6112 /**
6113 * units: MPH
6114 * offset 22900
6115 */
6116 uint8_t tcu_shiftSpeed34[TCU_TABLE_WIDTH] = {};
6117 /**
6118 * units: MPH
6119 * offset 22908
6120 */
6121 uint8_t tcu_shiftSpeed21[TCU_TABLE_WIDTH] = {};
6122 /**
6123 * units: MPH
6124 * offset 22916
6125 */
6126 uint8_t tcu_shiftSpeed32[TCU_TABLE_WIDTH] = {};
6127 /**
6128 * units: MPH
6129 * offset 22924
6130 */
6131 uint8_t tcu_shiftSpeed43[TCU_TABLE_WIDTH] = {};
6132 /**
6133 * units: ms
6134 * offset 22932
6135 */
6137 /**
6138 * units: Volts
6139 * offset 22936
6140 */
6141 scaled_channel<int16_t, 10, 1> alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6142 /**
6143 * units: Load
6144 * offset 22968
6145 */
6146 uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6147 /**
6148 * units: RPM
6149 * offset 22976
6150 */
6151 uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_SIZE] = {};
6152 /**
6153 * units: C
6154 * offset 22984
6155 */
6156 float cltBoostCorrBins[BOOST_CURVE_SIZE] = {};
6157 /**
6158 * units: ratio
6159 * offset 23004
6160 */
6161 float cltBoostCorr[BOOST_CURVE_SIZE] = {};
6162 /**
6163 * units: C
6164 * offset 23024
6165 */
6166 float iatBoostCorrBins[BOOST_CURVE_SIZE] = {};
6167 /**
6168 * units: ratio
6169 * offset 23044
6170 */
6171 float iatBoostCorr[BOOST_CURVE_SIZE] = {};
6172 /**
6173 * units: C
6174 * offset 23064
6175 */
6176 float cltBoostAdderBins[BOOST_CURVE_SIZE] = {};
6177 /**
6178 * offset 23084
6179 */
6180 float cltBoostAdder[BOOST_CURVE_SIZE] = {};
6181 /**
6182 * units: C
6183 * offset 23104
6184 */
6185 float iatBoostAdderBins[BOOST_CURVE_SIZE] = {};
6186 /**
6187 * offset 23124
6188 */
6189 float iatBoostAdder[BOOST_CURVE_SIZE] = {};
6190 /**
6191 * units: RPM
6192 * offset 23144
6193 */
6194 scaled_channel<uint8_t, 1, 100> minimumOilPressureBins[8] = {};
6195 /**
6196 * units: kPa
6197 * offset 23152
6198 */
6199 scaled_channel<uint8_t, 1, 10> minimumOilPressureValues[8] = {};
6200 /**
6201 * offset 23160
6202 */
6203 blend_table_s targetAfrBlends[TARGET_AFR_BLEND_COUNT] = {};
6204 /**
6205 * units: RPM
6206 * offset 23536
6207 */
6208 scaled_channel<uint8_t, 1, 100> trimRpmBins[FUEL_TRIM_RPM_COUNT] = {};
6209 /**
6210 * offset 23544
6211 */
6212 uint16_t trimLoadBins[FUEL_TRIM_LOAD_COUNT] = {};
6213 /**
6214 * @@DYNO_RPM_STEP_TOOLTIP@@
6215 * units: Rpm
6216 * offset 23560
6217 */
6218 scaled_channel<uint8_t, 1, 1> dynoRpmStep;
6219 /**
6220 * @@DYNO_SAE_TEMPERATURE_C_TOOLTIP@@
6221 * units: C
6222 * offset 23561
6223 */
6224 scaled_channel<int8_t, 1, 1> dynoSaeTemperatureC;
6225 /**
6226 * @@DYNO_SAE_RELATIVE_HUMIDITY_TOOLTIP@@
6227 * units: %
6228 * offset 23562
6229 */
6230 scaled_channel<uint8_t, 1, 1> dynoSaeRelativeHumidity;
6231 /**
6232 * need 4 byte alignment
6233 * units: units
6234 * offset 23563
6235 */
6236 uint8_t alignmentFill_at_23563[1] = {};
6237 /**
6238 * @@DYNO_SAE_BARO_TOOLTIP@@
6239 * units: KPa
6240 * offset 23564
6241 */
6242 scaled_channel<float, 1, 1> dynoSaeBaro;
6243 /**
6244 * @@DYNO_CAR_WHEEL_DIA_INCH_TOOLTIP@@
6245 * units: Inch
6246 * offset 23568
6247 */
6248 scaled_channel<int8_t, 1, 1> dynoCarWheelDiaInch;
6249 /**
6250 * @@DYNO_CAR_WHEEL_ASPECT_RATIO_TOOLTIP@@
6251 * units: Aspect Ratio (height)
6252 * offset 23569
6253 */
6254 scaled_channel<int8_t, 1, 1> dynoCarWheelAspectRatio;
6255 /**
6256 * @@DYNO_CAR_WHEEL_TIRE_WIDTH_TOOLTIP@@
6257 * units: Width mm
6258 * offset 23570
6259 */
6260 scaled_channel<int16_t, 1, 1> dynoCarWheelTireWidthMm;
6261 /**
6262 * @@DYNO_CAR_GEAR_PRIMARY_REDUCTION_TOOLTIP@@
6263 * units: Units
6264 * offset 23572
6265 */
6266 scaled_channel<float, 1, 1> dynoCarGearPrimaryReduction;
6267 /**
6268 * @@DYNO_CAR_GEAR_RATIO_TOOLTIP@@
6269 * units: Units
6270 * offset 23576
6271 */
6272 scaled_channel<float, 1, 1> dynoCarGearRatio;
6273 /**
6274 * @@DYNO_CAR_GEAR_FINAL_DRIVE_TOOLTIP@@
6275 * units: Units
6276 * offset 23580
6277 */
6278 scaled_channel<float, 1, 1> dynoCarGearFinalDrive;
6279 /**
6280 * @@DYNO_CAR_CAR_MASS_TOOLTIP@@
6281 * units: Kg
6282 * offset 23584
6283 */
6284 scaled_channel<int16_t, 1, 1> dynoCarCarMassKg;
6285 /**
6286 * @@DYNO_CAR_CARGO_MASS_TOOLTIP@@
6287 * units: Kg
6288 * offset 23586
6289 */
6290 scaled_channel<int16_t, 1, 1> dynoCarCargoMassKg;
6291 /**
6292 * @@DYNO_CAR_COEFF_OF_DRAG_TOOLTIP@@
6293 * units: Coeff
6294 * offset 23588
6295 */
6296 scaled_channel<float, 1, 1> dynoCarCoeffOfDrag;
6297 /**
6298 * @@DYNO_CAR_FRONTAL_AREA_TOOLTIP@@
6299 * units: m2
6300 * offset 23592
6301 */
6302 scaled_channel<float, 1, 1> dynoCarFrontalAreaM2;
6303 /**
6304 * units: deg
6305 * offset 23596
6306 */
6307 scaled_channel<int8_t, 10, 1> trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_SIZE] = {};
6308 /**
6309 * units: rpm
6310 * offset 23612
6311 */
6312 scaled_channel<uint8_t, 1, 50> trailingSparkRpmBins[TRAILING_SPARK_SIZE] = {};
6313 /**
6314 * units: Load
6315 * offset 23616
6316 */
6317 scaled_channel<uint8_t, 1, 5> trailingSparkLoadBins[TRAILING_SPARK_SIZE] = {};
6318 /**
6319 * units: RPM
6320 * offset 23620
6321 */
6322 scaled_channel<uint8_t, 1, 100> maximumOilPressureBins[4] = {};
6323 /**
6324 * units: kPa
6325 * offset 23624
6326 */
6327 scaled_channel<uint8_t, 1, 10> maximumOilPressureValues[4] = {};
6328 /**
6329 * Selects the X axis to use for the table.
6330 * offset 23628
6331 */
6333 /**
6334 * How many % of ignition events will be cut
6335 * units: %
6336 * offset 23629
6337 */
6338 int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6339 /**
6340 * need 4 byte alignment
6341 * units: units
6342 * offset 23641
6343 */
6344 uint8_t alignmentFill_at_23641[1] = {};
6345 /**
6346 * offset 23642
6347 */
6348 int16_t torqueReductionCutXBins[TORQUE_TABLE_X_SIZE] = {};
6349 /**
6350 * units: gear N°
6351 * offset 23654
6352 */
6353 int8_t torqueReductionCutGearBins[TORQUE_TABLE_Y_SIZE] = {};
6354 /**
6355 * Selects the X axis to use for the table.
6356 * offset 23656
6357 */
6359 /**
6360 * need 4 byte alignment
6361 * units: units
6362 * offset 23657
6363 */
6364 uint8_t alignmentFill_at_23657[3] = {};
6365 /**
6366 * 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
6367 * units: ms
6368 * offset 23660
6369 */
6370 float torqueReductionTimeTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6371 /**
6372 * offset 23708
6373 */
6374 int16_t torqueReductionTimeXBins[TORQUE_TABLE_X_SIZE] = {};
6375 /**
6376 * units: gear N°
6377 * offset 23720
6378 */
6379 int8_t torqueReductionTimeGearBins[TORQUE_TABLE_Y_SIZE] = {};
6380 /**
6381 * Selects the X axis to use for the table.
6382 * offset 23722
6383 */
6385 /**
6386 * need 4 byte alignment
6387 * units: units
6388 * offset 23723
6389 */
6390 uint8_t alignmentFill_at_23723[1] = {};
6391 /**
6392 * How many degrees of timing advance will be reduced during the Torque Reduction Time
6393 * units: deg
6394 * offset 23724
6395 */
6396 float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE] = {};
6397 /**
6398 * offset 23772
6399 */
6400 int16_t torqueReductionIgnitionRetardXBins[TORQUE_TABLE_X_SIZE] = {};
6401 /**
6402 * units: gear N°
6403 * offset 23784
6404 */
6405 int8_t torqueReductionIgnitionRetardGearBins[TORQUE_TABLE_Y_SIZE] = {};
6406 /**
6407 * need 4 byte alignment
6408 * units: units
6409 * offset 23786
6410 */
6411 uint8_t alignmentFill_at_23786[2] = {};
6412 /**
6413 offset 23788 bit 0 */
6415 /**
6416 offset 23788 bit 1 */
6418 /**
6419 offset 23788 bit 2 */
6421 /**
6422 offset 23788 bit 3 */
6424 /**
6425 offset 23788 bit 4 */
6427 /**
6428 offset 23788 bit 5 */
6429 bool unusedBit_275_5 : 1 {};
6430 /**
6431 offset 23788 bit 6 */
6432 bool unusedBit_275_6 : 1 {};
6433 /**
6434 offset 23788 bit 7 */
6435 bool unusedBit_275_7 : 1 {};
6436 /**
6437 offset 23788 bit 8 */
6438 bool unusedBit_275_8 : 1 {};
6439 /**
6440 offset 23788 bit 9 */
6441 bool unusedBit_275_9 : 1 {};
6442 /**
6443 offset 23788 bit 10 */
6444 bool unusedBit_275_10 : 1 {};
6445 /**
6446 offset 23788 bit 11 */
6447 bool unusedBit_275_11 : 1 {};
6448 /**
6449 offset 23788 bit 12 */
6450 bool unusedBit_275_12 : 1 {};
6451 /**
6452 offset 23788 bit 13 */
6453 bool unusedBit_275_13 : 1 {};
6454 /**
6455 offset 23788 bit 14 */
6456 bool unusedBit_275_14 : 1 {};
6457 /**
6458 offset 23788 bit 15 */
6459 bool unusedBit_275_15 : 1 {};
6460 /**
6461 offset 23788 bit 16 */
6462 bool unusedBit_275_16 : 1 {};
6463 /**
6464 offset 23788 bit 17 */
6465 bool unusedBit_275_17 : 1 {};
6466 /**
6467 offset 23788 bit 18 */
6468 bool unusedBit_275_18 : 1 {};
6469 /**
6470 offset 23788 bit 19 */
6471 bool unusedBit_275_19 : 1 {};
6472 /**
6473 offset 23788 bit 20 */
6474 bool unusedBit_275_20 : 1 {};
6475 /**
6476 offset 23788 bit 21 */
6477 bool unusedBit_275_21 : 1 {};
6478 /**
6479 offset 23788 bit 22 */
6480 bool unusedBit_275_22 : 1 {};
6481 /**
6482 offset 23788 bit 23 */
6483 bool unusedBit_275_23 : 1 {};
6484 /**
6485 offset 23788 bit 24 */
6486 bool unusedBit_275_24 : 1 {};
6487 /**
6488 offset 23788 bit 25 */
6489 bool unusedBit_275_25 : 1 {};
6490 /**
6491 offset 23788 bit 26 */
6492 bool unusedBit_275_26 : 1 {};
6493 /**
6494 offset 23788 bit 27 */
6495 bool unusedBit_275_27 : 1 {};
6496 /**
6497 offset 23788 bit 28 */
6498 bool unusedBit_275_28 : 1 {};
6499 /**
6500 offset 23788 bit 29 */
6501 bool unusedBit_275_29 : 1 {};
6502 /**
6503 offset 23788 bit 30 */
6504 bool unusedBit_275_30 : 1 {};
6505 /**
6506 offset 23788 bit 31 */
6507 bool unusedBit_275_31 : 1 {};
6508};
6509static_assert(sizeof(persistent_config_s) == 23792);
6510
6511// end
6512// this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt
torqueReductionTable torqueReductionTimeTable
engine_type_e
debug_mode_e
trigger_type_e
firing_order_e
ve_override_e
MsIoBoxVss
launchActivationMode_e
InjectorNonlinearMode
boostType_e
MsIoBoxId
idle_mode_e
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
engine_load_mode_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
maf_sensor_type_e
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
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]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SIZE]
int8_t tractionControlEtbDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
scaled_channel< int8_t, 1, 5 > primeBins[PRIME_CURVE_COUNT]
uint8_t unusedOftenChangesDuringFirmwareUpdate[END_OF_CALIBRATION_PADDING]
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT]
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
int8_t tractionControlTimingDrop[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
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]
int8_t tractionControlIgnitionSkip[TRACTION_CONTROL_ETB_DROP_SIZE][TRACTION_CONTROL_ETB_DROP_SIZE]
scaled_channel< int8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
pin_input_mode_e luaDigitalInputPinModes[LUA_DIGITAL_INPUT_COUNT]
brain_input_pin_e auxSpeedSensorInputPin[AUX_SPEED_SENSOR_COUNT]
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SIZE]
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< uint8_t, 1, 5 > ignitionIatCorrLoadBins[IAT_IGN_CORR_COUNT]
scaled_channel< int16_t, 100, 1 > dcWastegateBiasValues[ETB_BIAS_CURVE_LENGTH]
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, 100 > maximumOilPressureBins[4]
uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
scaled_channel< int16_t, 1, 10 > ALSIgnSkipTable[ALS_SIZE][ALS_SIZE]
scaled_channel< uint8_t, 10, 1 > dwellVoltageCorrVoltBins[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 20, 1 > iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]
scaled_channel< uint8_t, 4, 1 > maxKnockRetardTable[KNOCK_TABLE_SIZE][KNOCK_TABLE_SIZE]
scaled_channel< uint8_t, 100, 1 > wwTauMapValues[WWAE_TABLE_SIZE]
float postCrankingFactor[CRANKING_ENRICH_COUNT][CRANKING_ENRICH_COUNT]
scaled_channel< int8_t, 2, 1 > knockBaseNoise[ENGINE_NOISE_CURVE_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< uint32_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_SIZE]
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]
float torqueReductionIgnitionRetardTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< uint8_t, 1, 10 > minimumOilPressureValues[8]
scaled_channel< uint16_t, 10, 1 > throttleEstimateEffectiveAreaBins[THR_EST_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< int8_t, 10, 1 > trailingSparkTable[TRAILING_SPARK_SIZE][TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 1, 5 > trailingSparkLoadBins[TRAILING_SPARK_SIZE]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_SIZE]
uint8_t pedalToTpsTable[PEDAL_TO_TPS_SIZE][PEDAL_TO_TPS_SIZE]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< int8_t, 1, 2 > cltIdleRpmBins[CLT_CURVE_SIZE]
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< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_SIZE]
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]
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< uint8_t, 1, 1 > tcu_shiftTpsBins[TCU_TABLE_WIDTH]
int8_t hpfpCompensation[HPFP_COMPENSATION_SIZE][HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 2 > boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 50, 1 > tpsTspCorrValues[TPS_TPS_ACCEL_CLT_CORR_TABLE]
scaled_channel< int8_t, 1, 5 > ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
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, 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]
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, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionIatCorrTable[IAT_IGN_CORR_COUNT][IAT_IGN_CORR_COUNT]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
int8_t torqueReductionIgnitionCutTable[TORQUE_TABLE_Y_SIZE][TORQUE_TABLE_X_SIZE]
uint16_t crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTable[MAP_EST_LOAD_COUNT][MAP_EST_RPM_COUNT]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< int8_t, 10, 1 > throttle2TrimTable[ETB2_TRIM_SIZE][ETB2_TRIM_SIZE]
scaled_channel< uint8_t, 1, 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< int8_t, 1, 5 > cltRevLimitRpmBins[CLT_LIMITER_CURVE_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]