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