! this file defines the format of rusEfi persistent configuration structure ! this file is processed by ../java_tools/config_definition.jar tool ! ! comments start with '!' ! ! each field is declared as ! type name;comment ! all the sub-structures are going to be nested withint the primary structure, that's ! needed to get a proper TunerStudio file struct engine_configuration_s #define MAP_ANGLE_SIZE 8 #define MAP_WINDOW_SIZE 8 #define CLT_CURVE_SIZE 16 #define IAT_CURVE_SIZE 16 #define VBAT_INJECTOR_CURVE_SIZE 8 #define DWELL_COUNT 8 #define CRANKING_CURVE_SIZE 8 #define IGN_LOAD_COUNT 16 #define IGN_RPM_COUNT 16 #define INJECTION_PIN_COUNT 12 #define IGNITION_PIN_COUNT 12 #define MAX31855_CS_COUNT 8 #define JOYSTICK_PIN_COUNT 5 #define DIGIPOT_COUNT 4 #define HW_MAX_ADC_INDEX 16 #define TRIGGER_SIMULATOR_PIN_COUNT 3 #define LOGIC_ANALYZER_CHANNEL_COUNT 4 #define LE_COMMAND_COUNT 16 #define FUEL_RPM_COUNT 16 #define FUEL_LOAD_COUNT 16 #define IGN_LOAD_COUNT 16 #define IGN_RPM_COUNT 16 ! please note that 1024 here is 4 * FUEL_RPM_COUNT * FUEL_LOAD_COUNT custom fuel_table_t 1024 array, F32, @OFFSET@, [16x16],"ms", 1, 0, 0.0, 300.0, 2 custom ve_table_t 1024 array, F32, @OFFSET@, [16x16],"deg", 1, 0, 0, 100.0, 2 custom afr_table_t 1024 array, F32, @OFFSET@, [16x16],"deg", 1, 0, 0, 25.0, 2 ! please note that 1024 here is 4 * IGN_LOAD_COUNT * IGN_RPM_COUNT custom ignition_table_t 1024 array, F32, @OFFSET@, [16x16],"deg", 1, 0, -360, 360, 2 struct cranking_parameters_s float baseFuel;;"ms", 1, 0, 0, 200, 1 int16_t rpm;This value controls what RPM values we consider 'cranking' (any RPM below 'crankingRpm')\nAnything above 'crankingRpm' would be 'running';"RPM", 1, 0, 0, 3000, 0 end_struct custom brain_input_pin_e 4 bits, U32, @OFFSET@, [0:6], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" custom brain_pin_e 4 bits, U32, @OFFSET@, [0:6], "GPIOA_0", "GPIOA_1", "GPIOA_2", "GPIOA_3", "GPIOA_4", "GPIOA_5", "GPIOA_6", "GPIOA_7", "GPIOA_8", "GPIOA_9", "GPIOA_10", "GPIOA_11", "GPIOA_12", "GPIOA_13", "GPIOA_14", "GPIOA_15", "GPIOB_0", "GPIOB_1", "GPIOB_2", "GPIOB_3", "GPIOB_4", "GPIOB_5", "GPIOB_6", "GPIOB_7", "GPIOB_8", "GPIOB_9", "GPIOB_10", "GPIOB_11", "GPIOB_12", "GPIOB_13", "GPIOB_14", "GPIOB_15", "GPIOC_0", "GPIOC_1", "GPIOC_2", "GPIOC_3", "GPIOC_4", "GPIOC_5", "GPIOC_6", "GPIOC_7", "GPIOC_8", "GPIOC_9", "GPIOC_10", "GPIOC_11", "GPIOC_12", "GPIOC_13", "GPIOC_14", "GPIOC_15", "GPIOD_0", "GPIOD_1", "GPIOD_2", "GPIOD_3", "GPIOD_4", "GPIOD_5", "GPIOD_6", "GPIOD_7", "GPIOD_8", "GPIOD_9", "GPIOD_10", "GPIOD_11", "GPIOD_12", "GPIOD_13", "GPIOD_14", "GPIOD_15", "GPIOE_0", "GPIOE_1", "GPIOE_2", "GPIOE_3", "GPIOE_4", "GPIOE_5", "GPIOE_6", "GPIOE_7", "GPIOE_8", "GPIOE_9", "GPIOE_10", "GPIOE_11", "GPIOE_12", "GPIOE_13", "GPIOE_14", "GPIOE_15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" custom pin_output_mode_e 4 bits, U32, @OFFSET@, [0:1], "default", "default inverted", "open", "open inverted" custom air_pressure_sensor_type_e 4 bits, U32, @OFFSET@, [0:1] "Custom", "DENSO183", "MPX4250", "INVALID" custom adc_channel_e 4 bits, U32, @OFFSET@, [0:3] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5" struct air_pressure_sensor_config_s float valueAt0;kPa value at zero volts;"kpa", 1, 0, 0, 450, 2 float valueAt5;kPa value at 5 volts;"kpa", 1, 0, 0, 450, 2 air_pressure_sensor_type_e type; adc_channel_e hwChannel; end_struct struct MAP_sensor_config_s @brief MAP averaging configuration float[MAP_ANGLE_SIZE] samplingAngleBins;;"RPM", 1, 0, 0.0, 18000, 2 float[MAP_ANGLE_SIZE] samplingAngle;@brief MAP averaging sampling start angle, by RPM;"deg", 1, 0, 0.0, 90, 2 float[MAP_WINDOW_SIZE] samplingWindowBins;;"RPM", 1, 0, 0.0, 18000, 2 float[MAP_WINDOW_SIZE] samplingWindow;@brief MAP averaging angle duration, by RPM;"deg", 1, 0, 0.0, 90, 2 air_pressure_sensor_config_s sensor end_struct struct ThermistorConf @brief Thermistor curve parameters float tempC_1;these values are in Celcuus;"*C", 1, 0, -40, 200, 1 float tempC_2;;"*C", 1, 0, -40, 200, 1 float tempC_3;;"*C", 1, 0, -40, 200, 1 float resistance_1;;"Ohm", 1, 0, 0, 200000, 1 float resistance_2;;"Ohm", 1, 0, 0, 200000, 1 float resistance_3;;"Ohm", 1, 0, 0, 200000, 1 float bias_resistor;;"Ohm", 1, 0, 0, 200000, 1 float s_h_a; float s_h_b; float s_h_c; end_struct custom engine_type_e 4 bits, S32, @OFFSET@, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" engine_type_e engineType;http://rusefi.com/wiki/index.php?title=Manual:Engine_Type int headerMagicValue;this magic number is used to make sure that what we read from Flash is in fact some configuration struct injector_s float flow;cc/min, cubic centimeter per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min;"cm3/min", 1, 0, 0, 1000, 2 float lag;;"msec", 1, 0, -10, 25.50, 2 float[VBAT_INJECTOR_CURVE_SIZE] battLagCorrBins;;"V", 1, 0, 0.0, 20.0, 2 float[VBAT_INJECTOR_CURVE_SIZE] battLagCorr;;"ms/V", 1, 0, 0.0, 50.0, 2 end_struct injector_s injector float[CLT_CURVE_SIZE] cltFuelCorrBins;;"C", 1, 0, -100.0, 250.0, 2 float[CLT_CURVE_SIZE] cltFuelCorr;;"%", 100, 0, 0.0, 500.0, 2 float[IAT_CURVE_SIZE] iatFuelCorrBins;;"C", 1, 0, -100.0, 250.0, 2 float[IAT_CURVE_SIZE] iatFuelCorr;;"%", 100, 0, 0.0, 500.0, 2 int16_t directSelfStimulation;Should the trigger emulator push data right into trigger input, eliminating the need for physical jumper wires?\nPS: Funny name, right? :)\ntodo: make this a bit on some bit field int16_t tpsMin;todo: extract these two fields into a structure\ntodo: we need two sets of TPS parameters - modern ETBs have to sensors;"ADC", 1, 0, 0, 1023, 0 int16_t tpsMax;tpsMax value as 10 bit ADC value. Not Voltage!;"ADC", 1, 0, 0, 1023, 0 uint16_t unused334; int16_t tpsErrorLowValue;todo: finish implementation. These values are used for TPS disconnect detection;"*C", 1, 0, -40, 200, 1 int16_t tpsErrorHighValue;;"*C", 1, 0, -40, 200, 1 float primingSquirtDurationMs;;"*C", 1, 0, -40, 200, 1 int engineCycle;360 for two-stroke\n720 for four-stroke;"engine cycle", 1, 0, 0, 1000, 0 cranking_parameters_s cranking MAP_sensor_config_s map;@see hasMapSensor\n@see isMapAveragingEnabled ThermistorConf clt;todo: merge with channel settings, use full-scale Thermistor here! ThermistorConf iat; float[DWELL_COUNT] sparkDwellBins;;"RPM", 1, 0.0, 0.0, 18000, 2 float[DWELL_COUNT] sparkDwell;;"ms", 1, 0.0, 0.0, 30.0, 2 float[IGN_LOAD_COUNT] ignitionLoadBins;;"Load", 1, 0.0, 0, 300.0, 2 float[IGN_RPM_COUNT] ignitionRpmBins;;"RPM", 1, 0.0, 0, 18000.0, 2 float ignitionBaseAngle;this value could be used to offset the whole ignition timing table by a constant;"RPM", 1, 0, 0, 3000.0, 0 float crankingChargeAngle;While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft\ndegrees, not in absolute time as in running mode.;"deg", 1, 0, 0, 3000.0, 0 custom timing_mode_e 4 bits, U32, @OFFSET@ [0:0], "dynamic", "fixed" timing_mode_e timingMode; float fixedModeTiming;This value is used in 'fixed timing' mode, i.e. constant timing\nThis mode is useful for instance while adjusting distributor location;"RPM", 1, 0, 0, 3000.0, 0 float[FUEL_LOAD_COUNT] fuelLoadBins;;"V", 1, 0, 0.0, 300.0, 2 float[FUEL_RPM_COUNT] fuelRpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0.0, 25500.0, 2 struct_no_prefix specs_s float displacement;Engine displacement, in liters\nsee also cylindersCount;"L", 1, 0, 0, 1000.0, 2 end_struct specs_s specs custom cylinders_count_t 4 bits, U32, @OFFSET@, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" cylinders_count_t cylindersCount; custom firing_order_e 4 bits, U32, @OFFSET@, [0:2], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "INVALID", "INVALID" firing_order_e firingOrder; int rpmHardLimit;;"rpm", 1, 0, 0, 10000.0, 2 injection_mode_e crankingInjectionMode; injection_mode_e injectionMode; float globalTriggerAngleOffset;This field is the angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.;"deg", 1, 0, 0, 720, 0 float analogInputDividerCoefficient;This parameter holds the coefficient of input voltage dividers;"coef", 1, 0, 0.01, 10.0, 2 custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:1], "MAF", "Alpha-N", "MAP", "SPEED DENSITY" engine_load_mode_e algorithm;This setting controls which algorithm is used for ENGINE LOAD float vbattDividerCoeff;;"coef", 1, 0, 0.01, 20.0, 2 float fanOnTemperature;Cooling fan turn-on temperature threshold, in Celsuis;"*C", 1, 0, 0, 1000.0, 2 float fanOffTemperature;Cooling fan turn-off temperature threshold, in Celsuis;"*C", 1, 0, 0, 1000.0, 2 brain_pin_e vehicleSpeedSensorInputPin; float vehicleSpeedCoef;This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h custom can_nbc_e 4 bits, U32, @OFFSET@, [0:1], "BMW", "FIAT", "VAG" , "INVALID" can_nbc_e canNbcType; int canSleepPeriod;;"ms", 1, 0, 0, 1000.0, 2 custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "One coil", "Individual Coils", "Wasted", "INVALID" ignition_mode_e ignitionMode; float rpmMultiplier;todo: refactor this, see operation_mode_e custom display_mode_e 4 bits, U32, @OFFSET@, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" display_mode_e displayMode; custom log_format_e 4 bits, U32, @OFFSET@, [0:0], "native", "Mega Log Viewer" log_format_e logFormat; int firmwareVersion;;"index", 1, 0, 0, 300, 0 int HD44780width;;"index", 1, 0, 0, 300, 0 int HD44780height;;"index", 1, 0, 0, 300, 0 adc_channel_e tpsAdcChannel; int overrideCrankingIgnition; int analogChartFrequency;;"index", 1, 0, 0, 300, 0 ; size 4 struct trigger_config_s @brief Trigger wheel(s) configuration custom bool32_t 4 bits, U32, @OFFSET@, [0:0], "false", "true" custom trigger_type_e 4 bits, U32, @OFFSET@, [0:3], "custom toothed wheel", "ford aspire", "dodge neon", "Miata NA", "Miata NB", "GM_7X", "Cooper", "Escort GT", "60/2", "36/1", "Accord CD", "MITSU", "INVALID", "INVALID", "INVALID", "INVALID" trigger_type_e type; bool32_t customIsSynchronizationNeeded; int customTotalToothCount;;"number", 1, 0.0, 0, 1000.0, 2 int customSkippedToothCount;;"number", 1, 0.0, 0, 1000.0, 2 float customSyncRatioFrom;;"number", 1, 0.0, 0, 1000.0, 2 float customSyncRatioTo;;"number", 1, 0.0, 0, 1000.0, 2 bool32_t customUseRiseEdge; end_struct trigger_config_s trigger; custom spi_device_e 4 bits,U32, @OFFSET@, [0:1], "Off", "SPI1", "SPI2", "SPI3" spi_device_e hip9011SpiDevice; adc_channel_e vbattAdcChannel; float globalFuelCorrection;;"coef", 1, 0.0, 0, 1000.0, 2 adc_channel_e cltAdcChannel;todo: merge with channel settings, use full-scale Thermistor! adc_channel_e iatAdcChannel; adc_channel_e mafAdcChannel; struct afr_sensor_s adc_channel_e hwChannel; float v1;; "volts", 1, 0.0, 0, 10.0, 2 float value1;; "AFR", 1, 0.0, 0, 1000.0, 2 float v2;; "volts", 1, 0.0, 0, 10.0, 2 float value2;; "AFR", 1, 0.0, 0, 1000.0, 2 end_struct afr_sensor_s afr;@see hasAfrSensor float injectionAngle;this is about deciding when the injector starts it's squirt;"deg", 1, 0.0, 0, 1000.0, 2 float crankingTimingAngle;; "deg", 1, 0.0, -360, 360, 2 float diffLoadEnrichmentCoef; air_pressure_sensor_config_s baroSensor;@see hasBaroSensor float[FUEL_LOAD_COUNT] veLoadBins;;"%", 1, 0.0, 0, 300.0, 2 float[FUEL_RPM_COUNT] veRpmBins;;"RPM", 1, 0.0, 0, 18000.0, 2 float[FUEL_LOAD_COUNT] afrLoadBins;;"%", 1, 0.0, 0, 300.0, 2 float[FUEL_RPM_COUNT] afrRpmBins;;"RPM", 1, 0.0, 0, 18000.0, 2 fuel_table_t fuelTable; ignition_table_t ignitionTable; ve_table_t veTable; afr_table_t afrTable; struct_no_prefix board_configuration_s brain_pin_e idleValvePin; pin_output_mode_e idleValvePinMode; brain_pin_e fuelPumpPin; pin_output_mode_e fuelPumpPinMode; brain_pin_e[INJECTION_PIN_COUNT iterate] injectionPins; pin_output_mode_e injectionPinMode; brain_pin_e[IGNITION_PIN_COUNT iterate] ignitionPins; pin_output_mode_e ignitionPinMode; brain_pin_e malfunctionIndicatorPin; pin_output_mode_e malfunctionIndicatorPinMode; brain_pin_e fanPin; pin_output_mode_e fanPinMode; brain_pin_e electronicThrottlePin1; pin_output_mode_e electronicThrottlePin1Mode; brain_pin_e clutchDownPin;some cars have a switch to indicate that clutch pedal is all the way down pin_input_mode_e clutchDownPinMode; brain_pin_e alternatorControlPin; pin_output_mode_e alternatorControlPinMode; brain_pin_e HD44780_rs; brain_pin_e HD44780_e; brain_pin_e HD44780_db4; brain_pin_e HD44780_db5; brain_pin_e HD44780_db6; brain_pin_e HD44780_db7; brain_pin_e gps_rx_pin; brain_pin_e gps_tx_pin; int idleSolenoidFrequency;;"Hz", 1, 0, 0, 3000, 0 int triggerSimulatorFrequency;;"Rpm", 1, 0, 0,30000, 0 spi_device_e digitalPotentiometerSpiDevice;Digital Potentiometer is used by stock ECU stimulation code brain_pin_e[DIGIPOT_COUNT iterate] digitalPotentiometerChipSelect; custom adc_channel_mode_e 4 bits, U32, @OFFSET@, [0:1], "Off", "Slow", "Fast", "INVALID" adc_channel_mode_e[HW_MAX_ADC_INDEX iterate] adcHwChannelEnabled; brain_input_pin_e[3 iterate] triggerInputPins; brain_pin_e mainRelayPin; int idleThreadPeriod; int consoleLoopPeriod; int lcdThreadPeriod; int tunerStudioThreadPeriod; int generalPeriodicThreadPeriod; uint32_t tunerStudioSerialSpeed;;"BPs", 1, 0, 0,1000000, 0 brain_pin_e boardTestModeJumperPin; can_device_mode_e canDeviceMode; brain_pin_e canTxPin; brain_pin_e canRxPin; brain_pin_e[TRIGGER_SIMULATOR_PIN_COUNT iterate] triggerSimulatorPins; pin_output_mode_e[TRIGGER_SIMULATOR_PIN_COUNT iterate] triggerSimulatorPinModes; brain_pin_e o2heaterPin; pin_output_mode_e o2heaterPinModeTodO; bit is_enabled_spi_1 bit is_enabled_spi_2 bit is_enabled_spi_3 bit isSdCardEnabled bit isFastAdcEnabled bit isEngineControlEnabled bit isHip9011Enabled brain_input_pin_e[LOGIC_ANALYZER_CHANNEL_COUNT iterate] logicAnalyzerPins; uint8_t[LOGIC_ANALYZER_CHANNEL_COUNT] logicAnalyzerMode;default or inverted input int unrealisticRpmThreashold; pin_output_mode_e mainRelayPinMode; brain_pin_e[MAX31855_CS_COUNT iterate] max31855_cs; spi_device_e max31855spiDevice; brain_pin_e[LE_COMMAND_COUNT iterate] fsioPins; pin_output_mode_e[LE_COMMAND_COUNT iterate] gpioPinModes; brain_pin_e[JOYSTICK_PIN_COUNT iterate] joystickPins; brain_pin_e triggerErrorPin;This pin is used for debugging - snap a logic analyzer on it and see if it's ever high pin_output_mode_e triggerErrorPinMode; float idleSolenoidPwm;value between 0 and 1 brain_pin_e acRelayPin; pin_output_mode_e acRelayPinMode; custom fsio_pwm_freq_t 2 scalar, U16, @OFFSET@, "Hz", 1, 0, 0, 3000, 0 fsio_pwm_freq_t[LE_COMMAND_COUNT iterate] fsioFrequency; brain_pin_e hip9011CsPin; brain_pin_e hip9011IntHoldPin; brain_pin_e hip9011OutPin; custom fsio_setting_t 4 scalar, F32, @OFFSET@, "Val", 1, 0, 0, 18000, 0 fsio_setting_t[LE_COMMAND_COUNT iterate] fsio_setting; brain_pin_e spi1mosiPin; brain_pin_e spi1misoPin; brain_pin_e spi1sckPin; brain_pin_e spi2mosiPin; brain_pin_e spi2misoPin; brain_pin_e spi2sckPin; brain_pin_e spi3mosiPin; brain_pin_e spi3misoPin; brain_pin_e spi3sckPin; float hip9011Gain; brain_pin_e joystickCenterPin; brain_pin_e joystickAPin; brain_pin_e joystickBPin; brain_pin_e joystickCPin; brain_pin_e joystickDPin; custom analog_chart_e 4 bits, S32, @OFFSET@, [0:1], "none", "trigger", "MAP", "INVALID" analog_chart_e analogChartMode; int[6] unusedbs; custom le_formula_t 200 array, U08, @OFFSET@, [200],"char", 1, 0, 0.0, 3.0, 2 le_formula_t[LE_COMMAND_COUNT iterate] le_formulas; end_struct board_configuration_s bc; bit hasMapSensor;@see isMapAveragingEnabled bit hasIatSensor bit hasBaroSensor bit hasAfrSensor bit useConstantDwellDuringCranking bit isDigitalChartEnabled bit isCanEnabled bit hasCltSensor bit canReadEnabled bit canWriteEnabled bit hasVehicleSpeedSensor bit isJoystickEnabled bit isGpsEnabled bit hasMafSensor bit hasTpsSensor adc_channel_e hipOutputChannel; idle_mode_e idleMode; bit isInjectionEnabled bit isIgnitionEnabled bit isCylinderCleanupEnabled bit secondTriggerChannelEnabled bit needSecondTriggerInput bit isMapAveragingEnabled bit isMilEnabled bit isFuelPumpEnabled bit isTunerStudioEnabled bit isWaveAnalyzerEnabled bit isIdleThreadEnabled bit isPrintTriggerSynchDetails bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed bit twoWireBatch uint32_t digitalChartSize;;"count", 1, 0, 0, 300, 0 float[CRANKING_CURVE_SIZE] crankingFuelCoef;;"%", 100, 0, 0.0, 700.0, 2 float[CRANKING_CURVE_SIZE] crankingFuelBins;;"C", 1, 0, -80.0, 170.0, 2 float[CRANKING_CURVE_SIZE] crankingCycleCoef;;"%", 100, 0, 0.0, 500.0, 2 float[CRANKING_CURVE_SIZE] crankingCycleBins;;"C", 1, 0, -80.0, 170.0, 2 float ignitionDwellForCrankingMs;;"ms", 1, 0, 0, 200, 1 int targetIdleRpm; adc_channel_e acSwitchAdc;A/C button input handled as analog input int ignMathCalculateAtIndex; int16_t acCutoffLowRpm; int16_t acCutoffHighRpm; int16_t acIdleRpmBump; int16_t unusedShort; adc_channel_e vRefAdcChannel; float knockDetectionWindowStart; float knockDetectionWindowEnd; float cylinderBore;Cylinder diameter, in mm. brain_pin_e clutchUpPin;Some vehicles have a switch to indicate that clutch pedal is all the way up pin_input_mode_e clutchUpPinMode; float hipThreshold; brain_pin_e[LE_COMMAND_COUNT iterate] fsioInputs; custom pin_input_mode_e 4 scalar, F32, @OFFSET@, "ms", 1, 0, 0, 200, 1 pin_input_mode_e[LE_COMMAND_COUNT iterate] fsioInputModes; int[149] unused3; le_formula_t timingMultiplier; le_formula_t timingAdditive; fuel_table_t injectionPhase; end_struct