diff --git a/firmware/config/boards/ST_STM32F4/board.mk b/firmware/config/boards/ST_STM32F4/board.mk
index b9b7dd5e44..25db37f4ac 100644
--- a/firmware/config/boards/ST_STM32F4/board.mk
+++ b/firmware/config/boards/ST_STM32F4/board.mk
@@ -1,5 +1,5 @@
-# List of all the board related files.
-BOARDSRC = $(PROJECT_DIR)/config/boards/ST_STM32F4/board.c
-
-# Required include directories
-BOARDINC = $(PROJECT_DIR)/config/boards/ST_STM32F4
+# List of all the board related files.
+BOARDSRC = $(PROJECT_DIR)/config/boards/ST_STM32F4/board.c
+
+# Required include directories
+BOARDINC = $(PROJECT_DIR)/config/boards/ST_STM32F4
diff --git a/firmware/config/engines/readme.md b/firmware/config/engines/readme.md
index 90aedac096..30a5d115bc 100644
--- a/firmware/config/engines/readme.md
+++ b/firmware/config/engines/readme.md
@@ -1,3 +1,3 @@
-Please do not be afraid of the content of this folder. You would NOT need your own file to start your own engine.
-
+Please do not be afraid of the content of this folder. You would NOT need your own file to start your own engine.
+
See http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
\ No newline at end of file
diff --git a/firmware/console/fl_binary/fl_protocol.cpp b/firmware/console/fl_binary/fl_protocol.cpp
index 0bbf63058e..4e7d749e94 100644
--- a/firmware/console/fl_binary/fl_protocol.cpp
+++ b/firmware/console/fl_binary/fl_protocol.cpp
@@ -1,13 +1,13 @@
-/*
- * @file fl_protocol.cpp
- *
- * @date Mar 15, 2017
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#include "fl_protocol.h"
-
-bool isStartOfFLProtocol(uint8_t firstByte) {
- return firstByte == START_TAG;
-}
-
+/*
+ * @file fl_protocol.cpp
+ *
+ * @date Mar 15, 2017
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#include "fl_protocol.h"
+
+bool isStartOfFLProtocol(uint8_t firstByte) {
+ return firstByte == START_TAG;
+}
+
diff --git a/firmware/console/fl_binary/fl_protocol.h b/firmware/console/fl_binary/fl_protocol.h
index 3a3060e364..5eb3c58712 100644
--- a/firmware/console/fl_binary/fl_protocol.h
+++ b/firmware/console/fl_binary/fl_protocol.h
@@ -1,27 +1,27 @@
-/*
- * @file fl_protocol.h
- *
- * @date Mar 14, 2017
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#ifndef CONSOLE_FL_BINARY_FT_PROTOCOL_H_
-#define CONSOLE_FL_BINARY_FT_PROTOCOL_H_
-
-#include "rusefi_types.h"
-
-#define START_TAG 0xAA
-#define MAGIC_TAG 0xBB
-#define END_TAG 0xCC
-
-#define FL_Firmware_version 0x0002
-#define FL_Interface_Version 0x0000
-#define FL_Compiler_Version 0xEEF2
-#define FL_Decoder_Name 0xEEEE
-#define FL_Firmware_Build_Date 0xEEF0B
-#define FL_Max_Packet_Size 0x0004
-#define FL_Operating_System 0xEEF4
-
-bool isStartOfFLProtocol(uint8_t firstByte);
-
-#endif /* CONSOLE_FL_BINARY_FT_PROTOCOL_H_ */
+/*
+ * @file fl_protocol.h
+ *
+ * @date Mar 14, 2017
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#ifndef CONSOLE_FL_BINARY_FT_PROTOCOL_H_
+#define CONSOLE_FL_BINARY_FT_PROTOCOL_H_
+
+#include "rusefi_types.h"
+
+#define START_TAG 0xAA
+#define MAGIC_TAG 0xBB
+#define END_TAG 0xCC
+
+#define FL_Firmware_version 0x0002
+#define FL_Interface_Version 0x0000
+#define FL_Compiler_Version 0xEEF2
+#define FL_Decoder_Name 0xEEEE
+#define FL_Firmware_Build_Date 0xEEF0B
+#define FL_Max_Packet_Size 0x0004
+#define FL_Operating_System 0xEEF4
+
+bool isStartOfFLProtocol(uint8_t firstByte);
+
+#endif /* CONSOLE_FL_BINARY_FT_PROTOCOL_H_ */
diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp
index 3e1e37c92b..7ebe8de67f 100644
--- a/firmware/console/status_loop.cpp
+++ b/firmware/console/status_loop.cpp
@@ -1,890 +1,890 @@
-/**
- * @file status_loop.cpp
- * @brief Human-readable protocol status messages
- *
- * http://rusefi.com/forum/viewtopic.php?t=263 Dev console overview
- * http://rusefi.com/forum/viewtopic.php?t=210 Commands overview
- *
- *
- * @date Mar 15, 2013
- * @author Andrey Belomutskiy, (c) 2012-2017
- *
- * This file is part of rusEfi - see http://rusefi.com
- *
- * rusEfi is free software; you can redistribute it and/or modify it under the terms of
- * the GNU General Public License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * rusEfi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
- * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with this program.
- * If not, see .
- *
- */
-
-#include "main.h"
-#include "status_loop.h"
-
-#include "adc_inputs.h"
-#if EFI_WAVE_ANALYZER || defined(__DOXYGEN__)
-#include "wave_analyzer.h"
-#endif /* EFI_WAVE_ANALYZER */
-
-// see RUS_EFI_VERSION_TAG in console source code
-#define RUS_EFI_VERSION_TAG "rusEfiVersion"
-
-#include "trigger_central.h"
-#include "engine_state.h"
-#include "io_pins.h"
-#include "efiGpio.h"
-#include "mmc_card.h"
-#include "console_io.h"
-#include "malfunction_central.h"
-#include "speed_density.h"
-
-#include "advance_map.h"
-#include "tunerstudio.h"
-#include "fuel_math.h"
-#include "main_trigger_callback.h"
-#include "engine_math.h"
-#include "spark_logic.h"
-#include "idle_thread.h"
-#include "engine_configuration.h"
-#include "rfiutil.h"
-#include "svnversion.h"
-#include "engine.h"
-#include "lcd_controller.h"
-#include "settings.h"
-#include "rusefi_outputs.h"
-
-extern fuel_Map3D_t veMap;
-extern afr_Map3D_t afrMap;
-extern bool main_loop_started;
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
-// todo: move this logic to algo folder!
-#include "rtc_helper.h"
-#include "lcd_HD44780.h"
-#include "rusefi.h"
-#include "pin_repository.h"
-#include "flash_main.h"
-#include "max31855.h"
-#include "vehicle_speed.h"
-#endif
-
-static bool subscription[(int) RO_LAST_ELEMENT];
-
-// this 'true' value is needed for simulator
-static volatile bool fullLog = true;
-int warningEnabled = true;
-//int warningEnabled = FALSE;
-
-#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
-extern TunerStudioOutputChannels tsOutputChannels;
-#endif
-
-extern bool hasFirmwareErrorFlag;
-#define FULL_LOGGING_KEY "fl"
-
-static char LOGGING_BUFFER[1400] CCM_OPTIONAL;
-static Logging logger("status loop", LOGGING_BUFFER, sizeof(LOGGING_BUFFER));
-
-static void setWarningEnabled(int value) {
- warningEnabled = value;
-}
-
-#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
-static char FILE_LOGGER[1000] CCM_OPTIONAL;
-static Logging fileLogger("file logger", FILE_LOGGER, sizeof(FILE_LOGGER));
-#endif /* EFI_FILE_LOGGING */
-
-static int logFileLineIndex = 0;
-#define TAB "\t"
-
-static void reportSensorF(Logging *log, bool fileFormat, const char *caption, const char *units, float value,
- int precision) {
- if (!fileFormat) {
-#if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__)
- debugFloat(log, caption, value, precision);
-#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
- } else {
-
-#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
- if (logFileLineIndex == 0) {
- append(log, caption);
- append(log, TAB);
- } else if (logFileLineIndex == 1) {
- append(log, units);
- append(log, TAB);
- } else {
- appendFloat(log, value, precision);
- append(log, TAB);
- }
-#endif /* EFI_FILE_LOGGING */
- }
-}
-
-static void reportSensorI(Logging *log, bool fileFormat, const char *caption, const char *units, int value) {
- if (!fileFormat) {
-
-#if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__)
- debugInt(log, caption, value);
-#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
- } else {
-#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
- if (logFileLineIndex == 0) {
- append(log, caption);
- append(log, TAB);
- } else if (logFileLineIndex == 1) {
- append(log, units);
- append(log, TAB);
- } else {
- appendPrintf(log, "%d%s", value, TAB);
- }
-#endif /* EFI_FILE_LOGGING */
- }
-}
-
-EXTERN_ENGINE
-;
-
-static char buf[6];
-
-/**
- * This is useful if we are changing engine mode dynamically
- * For example http://rusefi.com/forum/viewtopic.php?f=5&t=1085
- */
-static int packEngineMode(DECLARE_ENGINE_PARAMETER_F) {
- return (engineConfiguration->fuelAlgorithm << 4) +
- (engineConfiguration->injectionMode << 2) +
- engineConfiguration->ignitionMode;
-}
-
-static void printSensors(Logging *log, bool fileFormat) {
- // current time, in milliseconds
- int nowMs = currentTimeMillis();
- float sec = ((float) nowMs) / 1000;
- reportSensorF(log, fileFormat, "time", "", sec, 3); // log column 1
-
- int rpm = 0;
-#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
- rpm = getRpmE(engine);
- reportSensorI(log, fileFormat, "rpm", "RPM", rpm); // log column 2
-
-// reportSensorF(log, fileFormat, "TRG_0_DUTY", "%", getTriggerDutyCycle(0), 2);
-// reportSensorF(log, fileFormat, "TRG_1_DUTY", "%", getTriggerDutyCycle(1), 2);
-#endif
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- reportSensorF(log, fileFormat, "int_temp", "C", getMCUInternalTemperature(), 2); // log column #3
-#endif
-
- reportSensorI(log, fileFormat, "mode", "v", packEngineMode(PASS_ENGINE_PARAMETER_F)); // log column #3
-
- if (hasCltSensor()) {
- reportSensorF(log, fileFormat, "CLT", "C", getCoolantTemperature(PASS_ENGINE_PARAMETER_F), 2); // log column #4
- }
- if (hasTpsSensor()) {
- reportSensorF(log, fileFormat, "TPS", "%", getTPS(PASS_ENGINE_PARAMETER_F), 2); // log column #5
- }
-
- if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
- reportSensorF(log, fileFormat, "vbatt", "V", getVBatt(PASS_ENGINE_PARAMETER_F), 2); // log column #6
- }
-
- if (hasIatSensor()) {
- reportSensorF(log, fileFormat, "IAT", "C", getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F), 2); // log column #7
- }
-
- if (hasMafSensor()) {
- reportSensorF(log, fileFormat, "maf", "V", getMaf(PASS_ENGINE_PARAMETER_F), 2);
- reportSensorF(log, fileFormat, "mafr", "kg/hr", getRealMaf(PASS_ENGINE_PARAMETER_F), 2);
- }
-#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
- if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
- reportSensorF(log, fileFormat, "MAP", "kPa", getMap(), 2);
-// reportSensorF(log, fileFormat, "map_r", "V", getRawMap(), 2);
- }
-#endif /* EFI_ANALOG_SENSORS */
-#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
- if (hasBaroSensor()) {
- reportSensorF(log, fileFormat, "baro", "kPa", getBaroPressure(), 2);
- }
-#endif /* EFI_ANALOG_SENSORS */
-
- if (hasAfrSensor(PASS_ENGINE_PARAMETER_F)) {
- reportSensorF(log, fileFormat, "afr", "AFR", getAfr(PASS_ENGINE_PARAMETER_F), 2);
- }
-
-#if EFI_IDLE_CONTROL || defined(__DOXYGEN__)
- if (fileFormat) {
- reportSensorF(log, fileFormat, "idle", "%", getIdlePosition(), 2);
- }
-#endif /* EFI_IDLE_CONTROL */
-
-#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
- reportSensorF(log, fileFormat, "target", "AFR", engine->engineState.targetAFR, 2);
-#endif /* EFI_ANALOG_SENSORS */
-
- if (fileFormat) {
-
-#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
- reportSensorF(log, fileFormat, "debugF1", "v", tsOutputChannels.debugFloatField1, 4);
- reportSensorF(log, fileFormat, "debugF2", "v", tsOutputChannels.debugFloatField2, 4);
- reportSensorF(log, fileFormat, "debugF3", "v", tsOutputChannels.debugFloatField3, 4);
- reportSensorF(log, fileFormat, "debugF4", "v", tsOutputChannels.debugFloatField4, 4);
- reportSensorF(log, fileFormat, "debugF5", "v", tsOutputChannels.debugFloatField5, 4);
- reportSensorF(log, fileFormat, "debugF6", "v", tsOutputChannels.debugFloatField6, 4);
- reportSensorF(log, fileFormat, "debugF7", "v", tsOutputChannels.debugFloatField7, 4);
-
- reportSensorI(log, fileFormat, "debugInt1", "v", tsOutputChannels.debugIntField1);
- reportSensorI(log, fileFormat, "debugInt2", "v", tsOutputChannels.debugIntField2);
- reportSensorI(log, fileFormat, "debugInt3", "v", tsOutputChannels.debugIntField3);
-#endif /* EFI_TUNER_STUDIO */
-
- reportSensorF(log, fileFormat, "tCharge", "K", engine->engineState.tChargeK, 2); // log column #8
- if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
- reportSensorF(log, fileFormat, "curVE", "%", veMap.getValue(rpm, getMap()), 2);
- }
- reportSensorF(log, fileFormat, "VVT", "deg", engine->triggerCentral.vvtPosition, 1);
- }
-
- float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F);
- reportSensorF(log, fileFormat, "ENGINE_LOAD", "x", engineLoad, 2);
-
-
- reportSensorF(log, fileFormat, "dwell", "ms", ENGINE(engineState.sparkDwell), 2);
- if (fileFormat) {
- reportSensorF(log, fileFormat, "timing", "deg", engine->engineState.timingAdvance, 2);
-
- }
-
- if (fileFormat) {
- floatms_t fuelBase = getBaseFuel(rpm PASS_ENGINE_PARAMETER);
- reportSensorF(log, fileFormat, "f: base", "ms", fuelBase, 2);
- reportSensorF(log, fileFormat, "f: actual", "ms", ENGINE(actualLastInjection), 2);
- reportSensorF(log, fileFormat, "f: lag", "ms", engine->engineState.injectorLag, 2);
- reportSensorF(log, fileFormat, "f: running", "ms", ENGINE(engineState.runningFuel), 2);
- reportSensorF(log, fileFormat, "f: pid", "ms", ENGINE(engineState.fuelPidCorrection), 2);
-
- reportSensorF(log, fileFormat, "f: wall amt", "v", ENGINE(wallFuel).getWallFuel(0), 2);
- reportSensorF(log, fileFormat, "f: wall crr", "v", ENGINE(wallFuelCorrection), 2);
-
- reportSensorI(log, fileFormat, "version", "#", getRusEfiVersion());
- }
-
-#if EFI_VEHICLE_SPEED || defined(__DOXYGEN__)
- if (hasVehicleSpeedSensor()) {
- float vehicleSpeed = getVehicleSpeed();
- reportSensorF(log, fileFormat, "vss", "kph", vehicleSpeed, 2);
- float sp2rpm = rpm == 0 ? 0 : vehicleSpeed / rpm;
- reportSensorF(log, fileFormat, "sp2rpm", "x", sp2rpm, 2);
- }
-#endif /* EFI_PROD_CODE */
-
- reportSensorF(log, fileFormat, "knck_c", "count", engine->knockCount, 0);
- reportSensorF(log, fileFormat, "knck_v", "v", engine->knockVolts, 2);
-
-// reportSensorF(log, fileFormat, "vref", "V", getVRef(engineConfiguration), 2);
-
- if (fileFormat) {
- reportSensorF(log, fileFormat, "f: tps delta", "v", engine->tpsAccelEnrichment.getMaxDelta(), 2);
- reportSensorF(log, fileFormat, "f: tps fuel", "ms", engine->engineState.tpsAccelEnrich, 2);
-
- reportSensorF(log, fileFormat, "f: el delta", "v", engine->engineLoadAccelEnrichment.getMaxDelta(), 2);
- if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
- reportSensorF(log, fileFormat, "f: el fuel", "v", engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_F) * 100 / getMap(), 2);
- }
-
- reportSensorF(log, fileFormat, "f: duty", "%", getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER), 2);
- reportSensorF(log, fileFormat, "dwell: duty", "%", getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER), 2);
- }
-
-
-// debugFloat(&logger, "tch", getTCharge1(tps), 2);
-
- for (int i = 0;ifsioAdc[i] != EFI_ADC_NONE) {
- strcpy(buf, "adcX");
- buf[3] = '0' + i;
- reportSensorF(log, fileFormat, buf, "", getVoltage("fsio", engineConfiguration->fsioAdc[i]), 2);
- }
- }
-
- reportSensorI(log, fileFormat, "warn", "count", engine->engineState.warningCounter);
- reportSensorI(log, fileFormat, "error", "code", engine->engineState.lastErrorCode);
-
-}
-
-
-void writeLogLine(void) {
-#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
- if (!main_loop_started)
- return;
- resetLogging(&fileLogger);
- printSensors(&fileLogger, true);
-
- if (isSdCardAlive()) {
- appendPrintf(&fileLogger, "\r\n");
- appendToLog(fileLogger.buffer);
- logFileLineIndex++;
- }
-#endif /* EFI_FILE_LOGGING */
-}
-
-static void printState(void) {
-#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
-
- // todo: make SWO work
-// char *msg = "hello\r\n";
-// for(int i=0;itriggerCentral.triggerState.runningRevolutionCounter);
-
- if (subscription[(int) RO_RUNNING_TRIGGER_ERROR])
- debugInt(&logger, "trg_r_errors", engine->triggerCentral.triggerState.runningTriggerErrorCounter);
-
- if (subscription[(int) RO_RUNNING_ORDERING_TRIGGER_ERROR])
- debugInt(&logger, "trg_r_order_errors", engine->triggerCentral.triggerState.runningOrderingErrorCounter);
-
- if (subscription[(int) RO_WAVE_CHART_CURRENT_SIZE])
- debugInt(&logger, "wave_chart_current", 0);
-
-// debugInt(&logger, "idl", getIdleSwitch());
-
-// debugFloat(&logger, "table_spark", getAdvance(rpm, getMaf()), 2);
-
-// float map = getMap();
-
-#endif /* EFI_SHAFT_POSITION_INPUT */
-}
-
-#define INITIAL_FULL_LOG TRUE
-//#define INITIAL_FULL_LOG FALSE
-
-volatile int needToReportStatus = FALSE;
-static int prevCkpEventCounter = -1;
-
-static LoggingWithStorage logger2("main event handler");
-
-static void printStatus(void) {
- needToReportStatus = TRUE;
-}
-
-/**
- * Time when the firmware version was reported last time, in seconds
- * TODO: implement a request/response instead of just constantly sending this out
- */
-static systime_t timeOfPreviousPrintVersion = (systime_t) -1;
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
-static void printOutPin(const char *pinName, brain_pin_e hwPin) {
- if (hwPin != GPIO_UNASSIGNED) {
- appendPrintf(&logger, "outpin%s%s@%s%s", DELIMETER, pinName, hwPortname(hwPin), DELIMETER);
- }
-}
-#endif /* EFI_PROD_CODE */
-
-static void printInfo(systime_t nowSeconds) {
- /**
- * we report the version every 4 seconds - this way the console does not need to
- * request it and we will display it pretty soon
- */
- if (overflowDiff(nowSeconds, timeOfPreviousPrintVersion) < 4) {
- return;
- }
- timeOfPreviousPrintVersion = nowSeconds;
- appendPrintf(&logger, "%s%s%d@%s %s %d%s", RUS_EFI_VERSION_TAG, DELIMETER,
- getRusEfiVersion(), VCS_VERSION,
- getConfigurationName(engineConfiguration->engineType),
- getTimeNowSeconds(),
- DELIMETER);
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- printOutPin(CRANK1, boardConfiguration->triggerInputPins[0]);
- printOutPin(CRANK2, boardConfiguration->triggerInputPins[1]);
- printOutPin(VVT_NAME, engineConfiguration->camInput);
- printOutPin(HIP_NAME, boardConfiguration->hip9011IntHoldPin);
- printOutPin(TACH_NAME, boardConfiguration->tachOutputPin);
- printOutPin(DIZZY_NAME, engineConfiguration->dizzySparkOutputPin);
-#if EFI_WAVE_ANALYZER || defined(__DOXYGEN__)
- printOutPin(WA_CHANNEL_1, boardConfiguration->logicAnalyzerPins[0]);
- printOutPin(WA_CHANNEL_2, boardConfiguration->logicAnalyzerPins[1]);
-#endif /* EFI_WAVE_ANALYZER */
-
- for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
- printOutPin(enginePins.coils[i].name, boardConfiguration->ignitionPins[i]);
-
- printOutPin(enginePins.injectors[i].name, boardConfiguration->injectionPins[i]);
- }
-#endif /* EFI_PROD_CODE */
-
-}
-
-static systime_t timeOfPreviousReport = (systime_t) -1;
-
-extern fatal_msg_t errorMessageBuffer;
-
-/**
- * @brief Sends all pending data to dev console
- */
-void updateDevConsoleState(Engine *engine) {
- if (!isCommandLineConsoleReady()) {
- return;
- }
-// looks like this is not needed anymore
-// checkIfShouldHalt();
- printPending();
-
- /**
- * this should go before the firmware error so that console can detect connection
- */
- printSensors(&logger, false);
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- // todo: unify with simulator!
- if (hasFirmwareError()) {
- scheduleMsg(&logger, "FATAL error: %s", errorMessageBuffer);
- warningEnabled = false;
- scheduleLogging(&logger);
- return;
- }
-#endif
-
-#if (EFI_PROD_CODE && HAL_USE_ADC) || defined(__DOXYGEN__)
- printFullAdcReportIfNeeded(&logger);
-#endif
-
- if (!fullLog) {
- return;
- }
-
- systime_t nowSeconds = getTimeNowSeconds();
- printInfo(nowSeconds);
-
-#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
- int currentCkpEventCounter = getCrankEventCounter();
- if (prevCkpEventCounter == currentCkpEventCounter && timeOfPreviousReport == nowSeconds) {
- return;
- }
- timeOfPreviousReport = nowSeconds;
-
- prevCkpEventCounter = currentCkpEventCounter;
-#else
- chThdSleepMilliseconds(200);
-#endif
-
- printState();
-
-#if EFI_WAVE_ANALYZER
- printWave(&logger);
-#endif
-
- scheduleLogging(&logger);
-}
-
-/*
- * command example:
- * sfm 3500 400
- * that would be 'show fuel for rpm 3500 maf 4.0'
- */
-
-static void showFuelInfo2(float rpm, float engineLoad) {
-
- float baseFuelMs = getBaseTableFuel(engineConfiguration, (int) rpm, engineLoad);
-
- float magicAir = getAirMass(engineConfiguration, 1, 100, convertCelsiusToKelvin(20));
-
- scheduleMsg(&logger, "SD magic fuel %f", sdMath(engineConfiguration, magicAir, 14.7));
- scheduleMsg(&logger, "inj flow %fcc/min displacement %fL", engineConfiguration->injector.flow,
- engineConfiguration->specs.displacement);
-
- scheduleMsg(&logger2, "algo=%s/pump=%s", getEngine_load_mode_e(engineConfiguration->fuelAlgorithm),
- boolToString(enginePins.fuelPumpRelay.getLogicValue()));
-
- scheduleMsg(&logger2, "injection phase=%f/global fuel correction=%f", getinjectionOffset(rpm), engineConfiguration->globalFuelCorrection);
-
- scheduleMsg(&logger2, "baro correction=%f", engine->engineState.baroCorrection);
-
-#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
- scheduleMsg(&logger, "base cranking fuel %f", engineConfiguration->cranking.baseFuel);
- scheduleMsg(&logger2, "cranking fuel: %f", getCrankingFuel(PASS_ENGINE_PARAMETER_F));
-
- if (engine->rpmCalculator.isRunning(PASS_ENGINE_PARAMETER_F)) {
- float iatCorrection = engine->engineState.iatFuelCorrection;
- float cltCorrection = engine->engineState.cltFuelCorrection;
- floatms_t injectorLag = engine->engineState.injectorLag;
- scheduleMsg(&logger2, "rpm=%f engineLoad=%f", rpm, engineLoad);
- scheduleMsg(&logger2, "baseFuel=%f", baseFuelMs);
-
- scheduleMsg(&logger2, "iatCorrection=%f cltCorrection=%f injectorLag=%f", iatCorrection, cltCorrection,
- injectorLag);
-
- float value = getRunningFuel(baseFuelMs, (int) rpm PASS_ENGINE_PARAMETER);
- scheduleMsg(&logger2, "injection pulse width: %f", value);
- }
-#endif
-}
-
-#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
-static void showFuelInfo(void) {
- showFuelInfo2((float) getRpmE(engine), getEngineLoadT(PASS_ENGINE_PARAMETER_F));
-}
-#endif
-
-static THD_WORKING_AREA(lcdThreadStack, UTILITY_THREAD_STACK_SIZE);
-
-/**
- * blinking thread to show that we are alive
- * that's a trivial task - a smaller stack should work
- */
-static THD_WORKING_AREA(blinkingStack, 128);
-
-static OutputPin *leds[] = { &enginePins.warningPin, &enginePins.runningPin, &enginePins.checkEnginePin,
- &enginePins.errorLedPin, &enginePins.communicationPin, &enginePins.checkEnginePin };
-
-extern pin_output_mode_e DEFAULT_OUTPUT;
-
-static void initStatusLeds(void) {
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- outputPinRegisterExt2("led: comm status", &enginePins.communicationPin,
- engineConfiguration->communicationPin, &DEFAULT_OUTPUT);
- // we initialize this here so that we can blink it on start-up
- outputPinRegisterExt2("MalfunctionIndicator", &enginePins.checkEnginePin, boardConfiguration->malfunctionIndicatorPin, &DEFAULT_OUTPUT);
-#endif
-
-#if EFI_WARNING_LED || defined(__DOXYGEN__)
- outputPinRegister("led: warning status", &enginePins.warningPin, LED_WARNING_PORT,
- LED_WARNING_PIN);
- outputPinRegisterExt2("led: running status", &enginePins.runningPin, engineConfiguration->runningPin,
- &DEFAULT_OUTPUT);
-#endif /* EFI_WARNING_LED */
-}
-
-/**
- * This method would blink all the LEDs just to test them
- */
-static void initialLedsBlink(void) {
- if (hasFirmwareError()) {
- // make sure we do not turn the fatal LED off if already have
- // fatal error by now
- return;
- }
- int size = sizeof(leds) / sizeof(leds[0]);
- for (int i = 0; i < size && !hasFirmwareError(); i++)
- leds[i]->setValue(1);
-
- chThdSleepMilliseconds(100);
-
- // re-checking in case the error has happened while we were sleeping
- for (int i = 0; i < size && !hasFirmwareError(); i++)
- leds[i]->setValue(0);
-}
-
-int blinkingPeriod = 33;
-
-/**
- * this is useful to test connectivity
- */
-static void setBlinkingPeriod(int value) {
- if (value > 0)
- blinkingPeriod = value;
-}
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
-
-extern efitick_t lastDecodingErrorTime;
-
-static bool isTriggerErrorNow() {
- bool justHadError = (getTimeNowNt() - lastDecodingErrorTime) < US2NT(2 * 1000 * 3 * blinkingPeriod);
- return justHadError || isTriggerDecoderError();
-}
-
-extern bool consoleByteArrived;
-
-/**
- * this thread has a lower-then-usual stack size so we cannot afford *print* methods here
- */
-static void blinkingThread(void *arg) {
- (void) arg;
- chRegSetThreadName("communication blinking");
-
- initialLedsBlink();
-
- while (true) {
- int delayMs = is_usb_serial_ready() ? 3 * blinkingPeriod : blinkingPeriod;
-
-#if EFI_INTERNAL_FLASH || defined(__DOXYGEN__)
- if (getNeedToWriteConfiguration()) {
- delayMs = 2 * delayMs;
- }
-#endif
-
- if (!hasFirmwareError() && !hasFirmwareErrorFlag) {
- enginePins.communicationPin.setValue(0);
- }
- enginePins.warningPin.setValue(0);
- chThdSleepMilliseconds(delayMs);
-
- enginePins.communicationPin.setValue(1);
-#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
- if (isTriggerErrorNow() || isIgnitionTimingError() || consoleByteArrived) {
- consoleByteArrived = false;
- enginePins.warningPin.setValue(1);
- }
-#endif
- chThdSleepMilliseconds(delayMs);
-
- }
-}
-
-#endif /* EFI_PROD_CODE */
-
-static void lcdThread(void *arg) {
- (void)arg;
- chRegSetThreadName("lcd");
- while (true) {
- if (engineConfiguration->bc.useLcdScreen) {
-#if EFI_HD44780_LCD
- updateHD44780lcd(engine);
-#endif
- }
- chThdSleepMilliseconds(engineConfiguration->bc.lcdThreadPeriod);
- }
-}
-
-#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
-
-void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_S) {
-#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
- int rpm = getRpmE(engine);
-#else
- int rpm = 0;
-#endif
-
- float tps = getTPS(PASS_ENGINE_PARAMETER_F);
- float coolant = getCoolantTemperature(PASS_ENGINE_PARAMETER_F);
- float intake = getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F);
-
- float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F);
-
- // header
- tsOutputChannels->tsConfigVersion = TS_FILE_VERSION;
-
- // engine state
- tsOutputChannels->rpm = rpm;
- tsOutputChannels->coolantTemperature = coolant;
- tsOutputChannels->intakeAirTemperature = intake;
- tsOutputChannels->throttlePositon = tps;
- tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMaf(PASS_ENGINE_PARAMETER_F) : 0;
- tsOutputChannels->massAirFlow = hasMafSensor() ? getRealMaf(PASS_ENGINE_PARAMETER_F) : 0;
-
- if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
- float mapValue = getMap();
- tsOutputChannels->veValue = veMap.getValue(rpm, mapValue);
- // todo: bug here? target afr could work based on real MAF?
- tsOutputChannels->currentTargetAfr = afrMap.getValue(rpm, mapValue);
- tsOutputChannels->manifoldAirPressure = mapValue;
- }
- tsOutputChannels->airFuelRatio = getAfr(PASS_ENGINE_PARAMETER_F);
- if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
- tsOutputChannels->vBatt = getVBatt(PASS_ENGINE_PARAMETER_F);
- }
- tsOutputChannels->tpsADC = getTPS12bitAdc(PASS_ENGINE_PARAMETER_F) / TPS_TS_CONVERSION;
-#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
- tsOutputChannels->baroPressure = hasBaroSensor() ? getBaroPressure() : 0;
-#endif /* EFI_ANALOG_SENSORS */
- tsOutputChannels->engineLoad = engineLoad;
- tsOutputChannels->rpmAcceleration = engine->rpmCalculator.getRpmAcceleration();
- tsOutputChannels->triggerErrorsCounter = engine->triggerCentral.triggerState.totalTriggerErrorCounter;
- tsOutputChannels->baroCorrection = engine->engineState.baroCorrection;
- tsOutputChannels->pedalPosition = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_F) ? getPedalPosition(PASS_ENGINE_PARAMETER_F) : 0;
- tsOutputChannels->knockCount = engine->knockCount;
- tsOutputChannels->knockLevel = engine->knockVolts;
- tsOutputChannels->fuelTankGauge = engine->sensors.fuelTankGauge;
-
- tsOutputChannels->hasFatalError = hasFirmwareError();
- tsOutputChannels->totalTriggerErrorCounter = engine->triggerCentral.triggerState.totalTriggerErrorCounter;
-
- tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER);
- tsOutputChannels->fuelRunning = ENGINE(engineState.runningFuel);
- tsOutputChannels->fuelPidCorrection = ENGINE(engineState.fuelPidCorrection);
- tsOutputChannels->injectorLagMs = ENGINE(engineState.injectorLag);
- tsOutputChannels->fuelBase = engine->engineState.baseFuel;
- tsOutputChannels->actualLastInjection = ENGINE(actualLastInjection);
-
- tsOutputChannels->coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER);
-
- efitimesec_t now = getTimeNowSeconds();
- tsOutputChannels->timeSeconds = now;
- tsOutputChannels->firmwareVersion = getRusEfiVersion();
-
- tsOutputChannels->isWarnNow = isWarningNow(now, true);
-
- if (engineConfiguration->debugMode == DBG_TPS_ACCEL) {
- tsOutputChannels->debugIntField1 = engine->tpsAccelEnrichment.cb.getSize();
- }
-
- if (engineConfiguration->debugMode == DBG_TRIGGER_INPUT) {
- tsOutputChannels->debugIntField1 = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_FALLING);
- tsOutputChannels->debugIntField2 = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_FALLING);
- tsOutputChannels->debugIntField3 = engine->triggerCentral.getHwEventCounter((int)SHAFT_3RD_FALLING);
-
- tsOutputChannels->debugFloatField1 = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_RISING);
- tsOutputChannels->debugFloatField2 = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_RISING);
- tsOutputChannels->debugFloatField3 = engine->triggerCentral.getHwEventCounter((int)SHAFT_3RD_RISING);
-
- } else if (engineConfiguration->debugMode == FSIO_ADC) {
- // todo: implement a proper loop
- if (engineConfiguration->fsioAdc[0] != EFI_ADC_NONE) {
- strcpy(buf, "adcX");
- tsOutputChannels->debugFloatField1 = getVoltage("fsio", engineConfiguration->fsioAdc[0]);
- }
- } else if (engineConfiguration->debugMode == DBG_VEHICLE_SPEED_SENSOR) {
- tsOutputChannels->debugIntField1 = engine->engineState.vssCounter;
- } else if (engineConfiguration->debugMode == DBG_SD_CARD) {
- tsOutputChannels->debugIntField1 = engine->engineState.totalLoggedBytes;
- } else if (engineConfiguration->debugMode == DBG_CRANKING_DETAILS) {
- tsOutputChannels->debugIntField1 = engine->rpmCalculator.getRevolutionCounterSinceStart();
- }
-
-
- tsOutputChannels->wallFuelAmount = ENGINE(wallFuel).getWallFuel(0);
- tsOutputChannels->wallFuelCorrection = ENGINE(wallFuelCorrection);
- // TPS acceleration
- tsOutputChannels->deltaTps = engine->tpsAccelEnrichment.getMaxDelta();
- tsOutputChannels->tpsAccelFuel = engine->engineState.tpsAccelEnrich;
- // engine load acceleration
- if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
- tsOutputChannels->engineLoadAccelExtra = engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_F) * 100 / getMap();
- }
- tsOutputChannels->engineLoadDelta = engine->engineLoadAccelEnrichment.getMaxDelta();
-
-
- tsOutputChannels->iatCorrection = ENGINE(engineState.iatFuelCorrection);
- tsOutputChannels->cltCorrection = ENGINE(engineState.cltFuelCorrection);
-
- tsOutputChannels->checkEngine = hasErrorCodes();
-
- tsOutputChannels->vvtPosition = engine->triggerCentral.vvtPosition;
-
- tsOutputChannels->engineMode = packEngineMode(PASS_ENGINE_PARAMETER_F);
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- tsOutputChannels->internalMcuTemperature = getMCUInternalTemperature();
- tsOutputChannels->idlePosition = getIdlePosition();
- tsOutputChannels->isTriggerError = isTriggerErrorNow();
-
-#if EFI_MAX_31855 || defined(__DOXYGEN__)
- for (int i = 0; i < EGT_CHANNEL_COUNT; i++)
- tsOutputChannels->egtValues.values[i] = getEgtValue(i);
-#endif /* EFI_MAX_31855 */
-
-#if EFI_INTERNAL_FLASH || defined(__DOXYGEN__)
- tsOutputChannels->needBurn = getNeedToWriteConfiguration();
-#endif
-#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
- tsOutputChannels->hasSdCard = isSdCardAlive();
-#endif
- tsOutputChannels->isFuelPumpOn = enginePins.fuelPumpRelay.getLogicValue();
- tsOutputChannels->isFanOn = enginePins.fanRelay.getLogicValue();
- tsOutputChannels->isO2HeaterOn = enginePins.o2heater.getLogicValue();
- tsOutputChannels->isIgnitionEnabled = engineConfiguration->isIgnitionEnabled;
- tsOutputChannels->isInjectionEnabled = engineConfiguration->isInjectionEnabled;
- tsOutputChannels->isCylinderCleanupEnabled = engineConfiguration->isCylinderCleanupEnabled;
- tsOutputChannels->isCylinderCleanupActivated = engine->isCylinderCleanupMode;
- tsOutputChannels->secondTriggerChannelEnabled = engineConfiguration->secondTriggerChannelEnabled;
-#if EFI_VEHICLE_SPEED || defined(__DOXYGEN__)
- float vehicleSpeed = getVehicleSpeed();
- tsOutputChannels->vehicleSpeedKph = vehicleSpeed;
- tsOutputChannels->speedToRpmRatio = vehicleSpeed / rpm;
-
-#endif /* EFI_VEHICLE_SPEED */
- tsOutputChannels->isCltError = !isValidCoolantTemperature(getCoolantTemperature(PASS_ENGINE_PARAMETER_F));
- tsOutputChannels->isIatError = !isValidIntakeAirTemperature(getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F));
-#endif /* EFI_PROD_CODE */
-
- tsOutputChannels->warningCounter = engine->engineState.warningCounter;
- tsOutputChannels->lastErrorCode = engine->engineState.lastErrorCode;
-
- tsOutputChannels->knockNowIndicator = engine->knockCount > 0;
- tsOutputChannels->knockEverIndicator = engine->knockEver;
-
- tsOutputChannels->clutchUpState = engine->clutchUpState;
- tsOutputChannels->clutchDownState = engine->clutchDownState;
- tsOutputChannels->tCharge = getTCharge(rpm, tps, coolant, intake PASS_ENGINE_PARAMETER);
- float timing = engine->engineState.timingAdvance;
- tsOutputChannels->ignitionAdvance = timing > 360 ? timing - 720 : timing;
- tsOutputChannels->sparkDwell = ENGINE(engineState.sparkDwell);
- tsOutputChannels->crankingFuelMs = getCrankingFuel(PASS_ENGINE_PARAMETER_F);
- tsOutputChannels->chargeAirMass = engine->engineState.airMass;
-}
-
-extern TunerStudioOutputChannels tsOutputChannels;
-
-void prepareTunerStudioOutputs(void) {
- // sensor state for EFI Analytics Tuner Studio
- updateTunerStudioState(&tsOutputChannels PASS_ENGINE_PARAMETER);
-}
-
-#endif /* EFI_TUNER_STUDIO */
-
-static void subscribe(int outputOrdinal) {
- subscription[outputOrdinal] = true;
-}
-
-static void unsubscribe(int outputOrdinal) {
- subscription[outputOrdinal] = false;
-}
-
-void initStatusLoop(Engine *engine) {
- setFullLog(INITIAL_FULL_LOG);
- addConsoleActionI(FULL_LOGGING_KEY, setFullLog);
- addConsoleActionI("warn", setWarningEnabled);
-
-#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
- addConsoleActionFF("fuelinfo2", (VoidFloatFloat) showFuelInfo2);
- addConsoleAction("fuelinfo", showFuelInfo);
-#endif
-
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- subscription[(int) RO_TRG1_DUTY] = true;
- subscription[(int) RO_TRG2_DUTY] = true;
- subscription[(int) RO_TRG3_DUTY] = false;
- subscription[(int) RO_TRG4_DUTY] = false;
- subscription[(int) RO_TOTAL_REVOLUTION_COUNTER] = true;
- subscription[(int) RO_RUNNING_REVOLUTION_COUNTER] = false;
-
- addConsoleActionI("subscribe", subscribe);
- addConsoleActionI("unsubscribe", unsubscribe);
- addConsoleActionI("set_led_blinking_period", setBlinkingPeriod);
-
- addConsoleAction("status", printStatus);
-#endif /* EFI_PROD_CODE */
-}
-
-void startStatusThreads(Engine *engine) {
- // todo: refactoring needed, this file should probably be split into pieces
- chThdCreateStatic(lcdThreadStack, sizeof(lcdThreadStack), NORMALPRIO, (tfunc_t) lcdThread, engine);
-#if EFI_PROD_CODE || defined(__DOXYGEN__)
- initStatusLeds();
- chThdCreateStatic(blinkingStack, sizeof(blinkingStack), NORMALPRIO, (tfunc_t) blinkingThread, NULL);
-#endif /* EFI_PROD_CODE */
-}
-
-void setFullLog(int value) {
- print("Setting full logging: %s\r\n", boolToString(value));
- printMsg(&logger, "%s%d", FULL_LOGGING_KEY, value);
- fullLog = value;
-}
-
-bool getFullLog(void) {
- return fullLog;
-}
+/**
+ * @file status_loop.cpp
+ * @brief Human-readable protocol status messages
+ *
+ * http://rusefi.com/forum/viewtopic.php?t=263 Dev console overview
+ * http://rusefi.com/forum/viewtopic.php?t=210 Commands overview
+ *
+ *
+ * @date Mar 15, 2013
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ *
+ * This file is part of rusEfi - see http://rusefi.com
+ *
+ * rusEfi is free software; you can redistribute it and/or modify it under the terms of
+ * the GNU General Public License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * rusEfi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program.
+ * If not, see .
+ *
+ */
+
+#include "main.h"
+#include "status_loop.h"
+
+#include "adc_inputs.h"
+#if EFI_WAVE_ANALYZER || defined(__DOXYGEN__)
+#include "wave_analyzer.h"
+#endif /* EFI_WAVE_ANALYZER */
+
+// see RUS_EFI_VERSION_TAG in console source code
+#define RUS_EFI_VERSION_TAG "rusEfiVersion"
+
+#include "trigger_central.h"
+#include "engine_state.h"
+#include "io_pins.h"
+#include "efiGpio.h"
+#include "mmc_card.h"
+#include "console_io.h"
+#include "malfunction_central.h"
+#include "speed_density.h"
+
+#include "advance_map.h"
+#include "tunerstudio.h"
+#include "fuel_math.h"
+#include "main_trigger_callback.h"
+#include "engine_math.h"
+#include "spark_logic.h"
+#include "idle_thread.h"
+#include "engine_configuration.h"
+#include "rfiutil.h"
+#include "svnversion.h"
+#include "engine.h"
+#include "lcd_controller.h"
+#include "settings.h"
+#include "rusefi_outputs.h"
+
+extern fuel_Map3D_t veMap;
+extern afr_Map3D_t afrMap;
+extern bool main_loop_started;
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+// todo: move this logic to algo folder!
+#include "rtc_helper.h"
+#include "lcd_HD44780.h"
+#include "rusefi.h"
+#include "pin_repository.h"
+#include "flash_main.h"
+#include "max31855.h"
+#include "vehicle_speed.h"
+#endif
+
+static bool subscription[(int) RO_LAST_ELEMENT];
+
+// this 'true' value is needed for simulator
+static volatile bool fullLog = true;
+int warningEnabled = true;
+//int warningEnabled = FALSE;
+
+#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
+extern TunerStudioOutputChannels tsOutputChannels;
+#endif
+
+extern bool hasFirmwareErrorFlag;
+#define FULL_LOGGING_KEY "fl"
+
+static char LOGGING_BUFFER[1400] CCM_OPTIONAL;
+static Logging logger("status loop", LOGGING_BUFFER, sizeof(LOGGING_BUFFER));
+
+static void setWarningEnabled(int value) {
+ warningEnabled = value;
+}
+
+#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
+static char FILE_LOGGER[1000] CCM_OPTIONAL;
+static Logging fileLogger("file logger", FILE_LOGGER, sizeof(FILE_LOGGER));
+#endif /* EFI_FILE_LOGGING */
+
+static int logFileLineIndex = 0;
+#define TAB "\t"
+
+static void reportSensorF(Logging *log, bool fileFormat, const char *caption, const char *units, float value,
+ int precision) {
+ if (!fileFormat) {
+#if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__)
+ debugFloat(log, caption, value, precision);
+#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
+ } else {
+
+#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
+ if (logFileLineIndex == 0) {
+ append(log, caption);
+ append(log, TAB);
+ } else if (logFileLineIndex == 1) {
+ append(log, units);
+ append(log, TAB);
+ } else {
+ appendFloat(log, value, precision);
+ append(log, TAB);
+ }
+#endif /* EFI_FILE_LOGGING */
+ }
+}
+
+static void reportSensorI(Logging *log, bool fileFormat, const char *caption, const char *units, int value) {
+ if (!fileFormat) {
+
+#if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__)
+ debugInt(log, caption, value);
+#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
+ } else {
+#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
+ if (logFileLineIndex == 0) {
+ append(log, caption);
+ append(log, TAB);
+ } else if (logFileLineIndex == 1) {
+ append(log, units);
+ append(log, TAB);
+ } else {
+ appendPrintf(log, "%d%s", value, TAB);
+ }
+#endif /* EFI_FILE_LOGGING */
+ }
+}
+
+EXTERN_ENGINE
+;
+
+static char buf[6];
+
+/**
+ * This is useful if we are changing engine mode dynamically
+ * For example http://rusefi.com/forum/viewtopic.php?f=5&t=1085
+ */
+static int packEngineMode(DECLARE_ENGINE_PARAMETER_F) {
+ return (engineConfiguration->fuelAlgorithm << 4) +
+ (engineConfiguration->injectionMode << 2) +
+ engineConfiguration->ignitionMode;
+}
+
+static void printSensors(Logging *log, bool fileFormat) {
+ // current time, in milliseconds
+ int nowMs = currentTimeMillis();
+ float sec = ((float) nowMs) / 1000;
+ reportSensorF(log, fileFormat, "time", "", sec, 3); // log column 1
+
+ int rpm = 0;
+#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
+ rpm = getRpmE(engine);
+ reportSensorI(log, fileFormat, "rpm", "RPM", rpm); // log column 2
+
+// reportSensorF(log, fileFormat, "TRG_0_DUTY", "%", getTriggerDutyCycle(0), 2);
+// reportSensorF(log, fileFormat, "TRG_1_DUTY", "%", getTriggerDutyCycle(1), 2);
+#endif
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ reportSensorF(log, fileFormat, "int_temp", "C", getMCUInternalTemperature(), 2); // log column #3
+#endif
+
+ reportSensorI(log, fileFormat, "mode", "v", packEngineMode(PASS_ENGINE_PARAMETER_F)); // log column #3
+
+ if (hasCltSensor()) {
+ reportSensorF(log, fileFormat, "CLT", "C", getCoolantTemperature(PASS_ENGINE_PARAMETER_F), 2); // log column #4
+ }
+ if (hasTpsSensor()) {
+ reportSensorF(log, fileFormat, "TPS", "%", getTPS(PASS_ENGINE_PARAMETER_F), 2); // log column #5
+ }
+
+ if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
+ reportSensorF(log, fileFormat, "vbatt", "V", getVBatt(PASS_ENGINE_PARAMETER_F), 2); // log column #6
+ }
+
+ if (hasIatSensor()) {
+ reportSensorF(log, fileFormat, "IAT", "C", getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F), 2); // log column #7
+ }
+
+ if (hasMafSensor()) {
+ reportSensorF(log, fileFormat, "maf", "V", getMaf(PASS_ENGINE_PARAMETER_F), 2);
+ reportSensorF(log, fileFormat, "mafr", "kg/hr", getRealMaf(PASS_ENGINE_PARAMETER_F), 2);
+ }
+#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
+ if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
+ reportSensorF(log, fileFormat, "MAP", "kPa", getMap(), 2);
+// reportSensorF(log, fileFormat, "map_r", "V", getRawMap(), 2);
+ }
+#endif /* EFI_ANALOG_SENSORS */
+#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
+ if (hasBaroSensor()) {
+ reportSensorF(log, fileFormat, "baro", "kPa", getBaroPressure(), 2);
+ }
+#endif /* EFI_ANALOG_SENSORS */
+
+ if (hasAfrSensor(PASS_ENGINE_PARAMETER_F)) {
+ reportSensorF(log, fileFormat, "afr", "AFR", getAfr(PASS_ENGINE_PARAMETER_F), 2);
+ }
+
+#if EFI_IDLE_CONTROL || defined(__DOXYGEN__)
+ if (fileFormat) {
+ reportSensorF(log, fileFormat, "idle", "%", getIdlePosition(), 2);
+ }
+#endif /* EFI_IDLE_CONTROL */
+
+#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
+ reportSensorF(log, fileFormat, "target", "AFR", engine->engineState.targetAFR, 2);
+#endif /* EFI_ANALOG_SENSORS */
+
+ if (fileFormat) {
+
+#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
+ reportSensorF(log, fileFormat, "debugF1", "v", tsOutputChannels.debugFloatField1, 4);
+ reportSensorF(log, fileFormat, "debugF2", "v", tsOutputChannels.debugFloatField2, 4);
+ reportSensorF(log, fileFormat, "debugF3", "v", tsOutputChannels.debugFloatField3, 4);
+ reportSensorF(log, fileFormat, "debugF4", "v", tsOutputChannels.debugFloatField4, 4);
+ reportSensorF(log, fileFormat, "debugF5", "v", tsOutputChannels.debugFloatField5, 4);
+ reportSensorF(log, fileFormat, "debugF6", "v", tsOutputChannels.debugFloatField6, 4);
+ reportSensorF(log, fileFormat, "debugF7", "v", tsOutputChannels.debugFloatField7, 4);
+
+ reportSensorI(log, fileFormat, "debugInt1", "v", tsOutputChannels.debugIntField1);
+ reportSensorI(log, fileFormat, "debugInt2", "v", tsOutputChannels.debugIntField2);
+ reportSensorI(log, fileFormat, "debugInt3", "v", tsOutputChannels.debugIntField3);
+#endif /* EFI_TUNER_STUDIO */
+
+ reportSensorF(log, fileFormat, "tCharge", "K", engine->engineState.tChargeK, 2); // log column #8
+ if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
+ reportSensorF(log, fileFormat, "curVE", "%", veMap.getValue(rpm, getMap()), 2);
+ }
+ reportSensorF(log, fileFormat, "VVT", "deg", engine->triggerCentral.vvtPosition, 1);
+ }
+
+ float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F);
+ reportSensorF(log, fileFormat, "ENGINE_LOAD", "x", engineLoad, 2);
+
+
+ reportSensorF(log, fileFormat, "dwell", "ms", ENGINE(engineState.sparkDwell), 2);
+ if (fileFormat) {
+ reportSensorF(log, fileFormat, "timing", "deg", engine->engineState.timingAdvance, 2);
+
+ }
+
+ if (fileFormat) {
+ floatms_t fuelBase = getBaseFuel(rpm PASS_ENGINE_PARAMETER);
+ reportSensorF(log, fileFormat, "f: base", "ms", fuelBase, 2);
+ reportSensorF(log, fileFormat, "f: actual", "ms", ENGINE(actualLastInjection), 2);
+ reportSensorF(log, fileFormat, "f: lag", "ms", engine->engineState.injectorLag, 2);
+ reportSensorF(log, fileFormat, "f: running", "ms", ENGINE(engineState.runningFuel), 2);
+ reportSensorF(log, fileFormat, "f: pid", "ms", ENGINE(engineState.fuelPidCorrection), 2);
+
+ reportSensorF(log, fileFormat, "f: wall amt", "v", ENGINE(wallFuel).getWallFuel(0), 2);
+ reportSensorF(log, fileFormat, "f: wall crr", "v", ENGINE(wallFuelCorrection), 2);
+
+ reportSensorI(log, fileFormat, "version", "#", getRusEfiVersion());
+ }
+
+#if EFI_VEHICLE_SPEED || defined(__DOXYGEN__)
+ if (hasVehicleSpeedSensor()) {
+ float vehicleSpeed = getVehicleSpeed();
+ reportSensorF(log, fileFormat, "vss", "kph", vehicleSpeed, 2);
+ float sp2rpm = rpm == 0 ? 0 : vehicleSpeed / rpm;
+ reportSensorF(log, fileFormat, "sp2rpm", "x", sp2rpm, 2);
+ }
+#endif /* EFI_PROD_CODE */
+
+ reportSensorF(log, fileFormat, "knck_c", "count", engine->knockCount, 0);
+ reportSensorF(log, fileFormat, "knck_v", "v", engine->knockVolts, 2);
+
+// reportSensorF(log, fileFormat, "vref", "V", getVRef(engineConfiguration), 2);
+
+ if (fileFormat) {
+ reportSensorF(log, fileFormat, "f: tps delta", "v", engine->tpsAccelEnrichment.getMaxDelta(), 2);
+ reportSensorF(log, fileFormat, "f: tps fuel", "ms", engine->engineState.tpsAccelEnrich, 2);
+
+ reportSensorF(log, fileFormat, "f: el delta", "v", engine->engineLoadAccelEnrichment.getMaxDelta(), 2);
+ if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
+ reportSensorF(log, fileFormat, "f: el fuel", "v", engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_F) * 100 / getMap(), 2);
+ }
+
+ reportSensorF(log, fileFormat, "f: duty", "%", getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER), 2);
+ reportSensorF(log, fileFormat, "dwell: duty", "%", getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER), 2);
+ }
+
+
+// debugFloat(&logger, "tch", getTCharge1(tps), 2);
+
+ for (int i = 0;ifsioAdc[i] != EFI_ADC_NONE) {
+ strcpy(buf, "adcX");
+ buf[3] = '0' + i;
+ reportSensorF(log, fileFormat, buf, "", getVoltage("fsio", engineConfiguration->fsioAdc[i]), 2);
+ }
+ }
+
+ reportSensorI(log, fileFormat, "warn", "count", engine->engineState.warningCounter);
+ reportSensorI(log, fileFormat, "error", "code", engine->engineState.lastErrorCode);
+
+}
+
+
+void writeLogLine(void) {
+#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
+ if (!main_loop_started)
+ return;
+ resetLogging(&fileLogger);
+ printSensors(&fileLogger, true);
+
+ if (isSdCardAlive()) {
+ appendPrintf(&fileLogger, "\r\n");
+ appendToLog(fileLogger.buffer);
+ logFileLineIndex++;
+ }
+#endif /* EFI_FILE_LOGGING */
+}
+
+static void printState(void) {
+#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
+
+ // todo: make SWO work
+// char *msg = "hello\r\n";
+// for(int i=0;itriggerCentral.triggerState.runningRevolutionCounter);
+
+ if (subscription[(int) RO_RUNNING_TRIGGER_ERROR])
+ debugInt(&logger, "trg_r_errors", engine->triggerCentral.triggerState.runningTriggerErrorCounter);
+
+ if (subscription[(int) RO_RUNNING_ORDERING_TRIGGER_ERROR])
+ debugInt(&logger, "trg_r_order_errors", engine->triggerCentral.triggerState.runningOrderingErrorCounter);
+
+ if (subscription[(int) RO_WAVE_CHART_CURRENT_SIZE])
+ debugInt(&logger, "wave_chart_current", 0);
+
+// debugInt(&logger, "idl", getIdleSwitch());
+
+// debugFloat(&logger, "table_spark", getAdvance(rpm, getMaf()), 2);
+
+// float map = getMap();
+
+#endif /* EFI_SHAFT_POSITION_INPUT */
+}
+
+#define INITIAL_FULL_LOG TRUE
+//#define INITIAL_FULL_LOG FALSE
+
+volatile int needToReportStatus = FALSE;
+static int prevCkpEventCounter = -1;
+
+static LoggingWithStorage logger2("main event handler");
+
+static void printStatus(void) {
+ needToReportStatus = TRUE;
+}
+
+/**
+ * Time when the firmware version was reported last time, in seconds
+ * TODO: implement a request/response instead of just constantly sending this out
+ */
+static systime_t timeOfPreviousPrintVersion = (systime_t) -1;
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+static void printOutPin(const char *pinName, brain_pin_e hwPin) {
+ if (hwPin != GPIO_UNASSIGNED) {
+ appendPrintf(&logger, "outpin%s%s@%s%s", DELIMETER, pinName, hwPortname(hwPin), DELIMETER);
+ }
+}
+#endif /* EFI_PROD_CODE */
+
+static void printInfo(systime_t nowSeconds) {
+ /**
+ * we report the version every 4 seconds - this way the console does not need to
+ * request it and we will display it pretty soon
+ */
+ if (overflowDiff(nowSeconds, timeOfPreviousPrintVersion) < 4) {
+ return;
+ }
+ timeOfPreviousPrintVersion = nowSeconds;
+ appendPrintf(&logger, "%s%s%d@%s %s %d%s", RUS_EFI_VERSION_TAG, DELIMETER,
+ getRusEfiVersion(), VCS_VERSION,
+ getConfigurationName(engineConfiguration->engineType),
+ getTimeNowSeconds(),
+ DELIMETER);
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ printOutPin(CRANK1, boardConfiguration->triggerInputPins[0]);
+ printOutPin(CRANK2, boardConfiguration->triggerInputPins[1]);
+ printOutPin(VVT_NAME, engineConfiguration->camInput);
+ printOutPin(HIP_NAME, boardConfiguration->hip9011IntHoldPin);
+ printOutPin(TACH_NAME, boardConfiguration->tachOutputPin);
+ printOutPin(DIZZY_NAME, engineConfiguration->dizzySparkOutputPin);
+#if EFI_WAVE_ANALYZER || defined(__DOXYGEN__)
+ printOutPin(WA_CHANNEL_1, boardConfiguration->logicAnalyzerPins[0]);
+ printOutPin(WA_CHANNEL_2, boardConfiguration->logicAnalyzerPins[1]);
+#endif /* EFI_WAVE_ANALYZER */
+
+ for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
+ printOutPin(enginePins.coils[i].name, boardConfiguration->ignitionPins[i]);
+
+ printOutPin(enginePins.injectors[i].name, boardConfiguration->injectionPins[i]);
+ }
+#endif /* EFI_PROD_CODE */
+
+}
+
+static systime_t timeOfPreviousReport = (systime_t) -1;
+
+extern fatal_msg_t errorMessageBuffer;
+
+/**
+ * @brief Sends all pending data to dev console
+ */
+void updateDevConsoleState(Engine *engine) {
+ if (!isCommandLineConsoleReady()) {
+ return;
+ }
+// looks like this is not needed anymore
+// checkIfShouldHalt();
+ printPending();
+
+ /**
+ * this should go before the firmware error so that console can detect connection
+ */
+ printSensors(&logger, false);
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ // todo: unify with simulator!
+ if (hasFirmwareError()) {
+ scheduleMsg(&logger, "FATAL error: %s", errorMessageBuffer);
+ warningEnabled = false;
+ scheduleLogging(&logger);
+ return;
+ }
+#endif
+
+#if (EFI_PROD_CODE && HAL_USE_ADC) || defined(__DOXYGEN__)
+ printFullAdcReportIfNeeded(&logger);
+#endif
+
+ if (!fullLog) {
+ return;
+ }
+
+ systime_t nowSeconds = getTimeNowSeconds();
+ printInfo(nowSeconds);
+
+#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
+ int currentCkpEventCounter = getCrankEventCounter();
+ if (prevCkpEventCounter == currentCkpEventCounter && timeOfPreviousReport == nowSeconds) {
+ return;
+ }
+ timeOfPreviousReport = nowSeconds;
+
+ prevCkpEventCounter = currentCkpEventCounter;
+#else
+ chThdSleepMilliseconds(200);
+#endif
+
+ printState();
+
+#if EFI_WAVE_ANALYZER
+ printWave(&logger);
+#endif
+
+ scheduleLogging(&logger);
+}
+
+/*
+ * command example:
+ * sfm 3500 400
+ * that would be 'show fuel for rpm 3500 maf 4.0'
+ */
+
+static void showFuelInfo2(float rpm, float engineLoad) {
+
+ float baseFuelMs = getBaseTableFuel(engineConfiguration, (int) rpm, engineLoad);
+
+ float magicAir = getAirMass(engineConfiguration, 1, 100, convertCelsiusToKelvin(20));
+
+ scheduleMsg(&logger, "SD magic fuel %f", sdMath(engineConfiguration, magicAir, 14.7));
+ scheduleMsg(&logger, "inj flow %fcc/min displacement %fL", engineConfiguration->injector.flow,
+ engineConfiguration->specs.displacement);
+
+ scheduleMsg(&logger2, "algo=%s/pump=%s", getEngine_load_mode_e(engineConfiguration->fuelAlgorithm),
+ boolToString(enginePins.fuelPumpRelay.getLogicValue()));
+
+ scheduleMsg(&logger2, "injection phase=%f/global fuel correction=%f", getinjectionOffset(rpm), engineConfiguration->globalFuelCorrection);
+
+ scheduleMsg(&logger2, "baro correction=%f", engine->engineState.baroCorrection);
+
+#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
+ scheduleMsg(&logger, "base cranking fuel %f", engineConfiguration->cranking.baseFuel);
+ scheduleMsg(&logger2, "cranking fuel: %f", getCrankingFuel(PASS_ENGINE_PARAMETER_F));
+
+ if (engine->rpmCalculator.isRunning(PASS_ENGINE_PARAMETER_F)) {
+ float iatCorrection = engine->engineState.iatFuelCorrection;
+ float cltCorrection = engine->engineState.cltFuelCorrection;
+ floatms_t injectorLag = engine->engineState.injectorLag;
+ scheduleMsg(&logger2, "rpm=%f engineLoad=%f", rpm, engineLoad);
+ scheduleMsg(&logger2, "baseFuel=%f", baseFuelMs);
+
+ scheduleMsg(&logger2, "iatCorrection=%f cltCorrection=%f injectorLag=%f", iatCorrection, cltCorrection,
+ injectorLag);
+
+ float value = getRunningFuel(baseFuelMs, (int) rpm PASS_ENGINE_PARAMETER);
+ scheduleMsg(&logger2, "injection pulse width: %f", value);
+ }
+#endif
+}
+
+#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
+static void showFuelInfo(void) {
+ showFuelInfo2((float) getRpmE(engine), getEngineLoadT(PASS_ENGINE_PARAMETER_F));
+}
+#endif
+
+static THD_WORKING_AREA(lcdThreadStack, UTILITY_THREAD_STACK_SIZE);
+
+/**
+ * blinking thread to show that we are alive
+ * that's a trivial task - a smaller stack should work
+ */
+static THD_WORKING_AREA(blinkingStack, 128);
+
+static OutputPin *leds[] = { &enginePins.warningPin, &enginePins.runningPin, &enginePins.checkEnginePin,
+ &enginePins.errorLedPin, &enginePins.communicationPin, &enginePins.checkEnginePin };
+
+extern pin_output_mode_e DEFAULT_OUTPUT;
+
+static void initStatusLeds(void) {
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ outputPinRegisterExt2("led: comm status", &enginePins.communicationPin,
+ engineConfiguration->communicationPin, &DEFAULT_OUTPUT);
+ // we initialize this here so that we can blink it on start-up
+ outputPinRegisterExt2("MalfunctionIndicator", &enginePins.checkEnginePin, boardConfiguration->malfunctionIndicatorPin, &DEFAULT_OUTPUT);
+#endif
+
+#if EFI_WARNING_LED || defined(__DOXYGEN__)
+ outputPinRegister("led: warning status", &enginePins.warningPin, LED_WARNING_PORT,
+ LED_WARNING_PIN);
+ outputPinRegisterExt2("led: running status", &enginePins.runningPin, engineConfiguration->runningPin,
+ &DEFAULT_OUTPUT);
+#endif /* EFI_WARNING_LED */
+}
+
+/**
+ * This method would blink all the LEDs just to test them
+ */
+static void initialLedsBlink(void) {
+ if (hasFirmwareError()) {
+ // make sure we do not turn the fatal LED off if already have
+ // fatal error by now
+ return;
+ }
+ int size = sizeof(leds) / sizeof(leds[0]);
+ for (int i = 0; i < size && !hasFirmwareError(); i++)
+ leds[i]->setValue(1);
+
+ chThdSleepMilliseconds(100);
+
+ // re-checking in case the error has happened while we were sleeping
+ for (int i = 0; i < size && !hasFirmwareError(); i++)
+ leds[i]->setValue(0);
+}
+
+int blinkingPeriod = 33;
+
+/**
+ * this is useful to test connectivity
+ */
+static void setBlinkingPeriod(int value) {
+ if (value > 0)
+ blinkingPeriod = value;
+}
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+
+extern efitick_t lastDecodingErrorTime;
+
+static bool isTriggerErrorNow() {
+ bool justHadError = (getTimeNowNt() - lastDecodingErrorTime) < US2NT(2 * 1000 * 3 * blinkingPeriod);
+ return justHadError || isTriggerDecoderError();
+}
+
+extern bool consoleByteArrived;
+
+/**
+ * this thread has a lower-then-usual stack size so we cannot afford *print* methods here
+ */
+static void blinkingThread(void *arg) {
+ (void) arg;
+ chRegSetThreadName("communication blinking");
+
+ initialLedsBlink();
+
+ while (true) {
+ int delayMs = is_usb_serial_ready() ? 3 * blinkingPeriod : blinkingPeriod;
+
+#if EFI_INTERNAL_FLASH || defined(__DOXYGEN__)
+ if (getNeedToWriteConfiguration()) {
+ delayMs = 2 * delayMs;
+ }
+#endif
+
+ if (!hasFirmwareError() && !hasFirmwareErrorFlag) {
+ enginePins.communicationPin.setValue(0);
+ }
+ enginePins.warningPin.setValue(0);
+ chThdSleepMilliseconds(delayMs);
+
+ enginePins.communicationPin.setValue(1);
+#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
+ if (isTriggerErrorNow() || isIgnitionTimingError() || consoleByteArrived) {
+ consoleByteArrived = false;
+ enginePins.warningPin.setValue(1);
+ }
+#endif
+ chThdSleepMilliseconds(delayMs);
+
+ }
+}
+
+#endif /* EFI_PROD_CODE */
+
+static void lcdThread(void *arg) {
+ (void)arg;
+ chRegSetThreadName("lcd");
+ while (true) {
+ if (engineConfiguration->bc.useLcdScreen) {
+#if EFI_HD44780_LCD
+ updateHD44780lcd(engine);
+#endif
+ }
+ chThdSleepMilliseconds(engineConfiguration->bc.lcdThreadPeriod);
+ }
+}
+
+#if EFI_TUNER_STUDIO || defined(__DOXYGEN__)
+
+void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_S) {
+#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
+ int rpm = getRpmE(engine);
+#else
+ int rpm = 0;
+#endif
+
+ float tps = getTPS(PASS_ENGINE_PARAMETER_F);
+ float coolant = getCoolantTemperature(PASS_ENGINE_PARAMETER_F);
+ float intake = getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F);
+
+ float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F);
+
+ // header
+ tsOutputChannels->tsConfigVersion = TS_FILE_VERSION;
+
+ // engine state
+ tsOutputChannels->rpm = rpm;
+ tsOutputChannels->coolantTemperature = coolant;
+ tsOutputChannels->intakeAirTemperature = intake;
+ tsOutputChannels->throttlePositon = tps;
+ tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMaf(PASS_ENGINE_PARAMETER_F) : 0;
+ tsOutputChannels->massAirFlow = hasMafSensor() ? getRealMaf(PASS_ENGINE_PARAMETER_F) : 0;
+
+ if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
+ float mapValue = getMap();
+ tsOutputChannels->veValue = veMap.getValue(rpm, mapValue);
+ // todo: bug here? target afr could work based on real MAF?
+ tsOutputChannels->currentTargetAfr = afrMap.getValue(rpm, mapValue);
+ tsOutputChannels->manifoldAirPressure = mapValue;
+ }
+ tsOutputChannels->airFuelRatio = getAfr(PASS_ENGINE_PARAMETER_F);
+ if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
+ tsOutputChannels->vBatt = getVBatt(PASS_ENGINE_PARAMETER_F);
+ }
+ tsOutputChannels->tpsADC = getTPS12bitAdc(PASS_ENGINE_PARAMETER_F) / TPS_TS_CONVERSION;
+#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
+ tsOutputChannels->baroPressure = hasBaroSensor() ? getBaroPressure() : 0;
+#endif /* EFI_ANALOG_SENSORS */
+ tsOutputChannels->engineLoad = engineLoad;
+ tsOutputChannels->rpmAcceleration = engine->rpmCalculator.getRpmAcceleration();
+ tsOutputChannels->triggerErrorsCounter = engine->triggerCentral.triggerState.totalTriggerErrorCounter;
+ tsOutputChannels->baroCorrection = engine->engineState.baroCorrection;
+ tsOutputChannels->pedalPosition = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_F) ? getPedalPosition(PASS_ENGINE_PARAMETER_F) : 0;
+ tsOutputChannels->knockCount = engine->knockCount;
+ tsOutputChannels->knockLevel = engine->knockVolts;
+ tsOutputChannels->fuelTankGauge = engine->sensors.fuelTankGauge;
+
+ tsOutputChannels->hasFatalError = hasFirmwareError();
+ tsOutputChannels->totalTriggerErrorCounter = engine->triggerCentral.triggerState.totalTriggerErrorCounter;
+
+ tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER);
+ tsOutputChannels->fuelRunning = ENGINE(engineState.runningFuel);
+ tsOutputChannels->fuelPidCorrection = ENGINE(engineState.fuelPidCorrection);
+ tsOutputChannels->injectorLagMs = ENGINE(engineState.injectorLag);
+ tsOutputChannels->fuelBase = engine->engineState.baseFuel;
+ tsOutputChannels->actualLastInjection = ENGINE(actualLastInjection);
+
+ tsOutputChannels->coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER);
+
+ efitimesec_t now = getTimeNowSeconds();
+ tsOutputChannels->timeSeconds = now;
+ tsOutputChannels->firmwareVersion = getRusEfiVersion();
+
+ tsOutputChannels->isWarnNow = isWarningNow(now, true);
+
+ if (engineConfiguration->debugMode == DBG_TPS_ACCEL) {
+ tsOutputChannels->debugIntField1 = engine->tpsAccelEnrichment.cb.getSize();
+ }
+
+ if (engineConfiguration->debugMode == DBG_TRIGGER_INPUT) {
+ tsOutputChannels->debugIntField1 = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_FALLING);
+ tsOutputChannels->debugIntField2 = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_FALLING);
+ tsOutputChannels->debugIntField3 = engine->triggerCentral.getHwEventCounter((int)SHAFT_3RD_FALLING);
+
+ tsOutputChannels->debugFloatField1 = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_RISING);
+ tsOutputChannels->debugFloatField2 = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_RISING);
+ tsOutputChannels->debugFloatField3 = engine->triggerCentral.getHwEventCounter((int)SHAFT_3RD_RISING);
+
+ } else if (engineConfiguration->debugMode == FSIO_ADC) {
+ // todo: implement a proper loop
+ if (engineConfiguration->fsioAdc[0] != EFI_ADC_NONE) {
+ strcpy(buf, "adcX");
+ tsOutputChannels->debugFloatField1 = getVoltage("fsio", engineConfiguration->fsioAdc[0]);
+ }
+ } else if (engineConfiguration->debugMode == DBG_VEHICLE_SPEED_SENSOR) {
+ tsOutputChannels->debugIntField1 = engine->engineState.vssCounter;
+ } else if (engineConfiguration->debugMode == DBG_SD_CARD) {
+ tsOutputChannels->debugIntField1 = engine->engineState.totalLoggedBytes;
+ } else if (engineConfiguration->debugMode == DBG_CRANKING_DETAILS) {
+ tsOutputChannels->debugIntField1 = engine->rpmCalculator.getRevolutionCounterSinceStart();
+ }
+
+
+ tsOutputChannels->wallFuelAmount = ENGINE(wallFuel).getWallFuel(0);
+ tsOutputChannels->wallFuelCorrection = ENGINE(wallFuelCorrection);
+ // TPS acceleration
+ tsOutputChannels->deltaTps = engine->tpsAccelEnrichment.getMaxDelta();
+ tsOutputChannels->tpsAccelFuel = engine->engineState.tpsAccelEnrich;
+ // engine load acceleration
+ if (hasMapSensor(PASS_ENGINE_PARAMETER_F)) {
+ tsOutputChannels->engineLoadAccelExtra = engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_F) * 100 / getMap();
+ }
+ tsOutputChannels->engineLoadDelta = engine->engineLoadAccelEnrichment.getMaxDelta();
+
+
+ tsOutputChannels->iatCorrection = ENGINE(engineState.iatFuelCorrection);
+ tsOutputChannels->cltCorrection = ENGINE(engineState.cltFuelCorrection);
+
+ tsOutputChannels->checkEngine = hasErrorCodes();
+
+ tsOutputChannels->vvtPosition = engine->triggerCentral.vvtPosition;
+
+ tsOutputChannels->engineMode = packEngineMode(PASS_ENGINE_PARAMETER_F);
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ tsOutputChannels->internalMcuTemperature = getMCUInternalTemperature();
+ tsOutputChannels->idlePosition = getIdlePosition();
+ tsOutputChannels->isTriggerError = isTriggerErrorNow();
+
+#if EFI_MAX_31855 || defined(__DOXYGEN__)
+ for (int i = 0; i < EGT_CHANNEL_COUNT; i++)
+ tsOutputChannels->egtValues.values[i] = getEgtValue(i);
+#endif /* EFI_MAX_31855 */
+
+#if EFI_INTERNAL_FLASH || defined(__DOXYGEN__)
+ tsOutputChannels->needBurn = getNeedToWriteConfiguration();
+#endif
+#if EFI_FILE_LOGGING || defined(__DOXYGEN__)
+ tsOutputChannels->hasSdCard = isSdCardAlive();
+#endif
+ tsOutputChannels->isFuelPumpOn = enginePins.fuelPumpRelay.getLogicValue();
+ tsOutputChannels->isFanOn = enginePins.fanRelay.getLogicValue();
+ tsOutputChannels->isO2HeaterOn = enginePins.o2heater.getLogicValue();
+ tsOutputChannels->isIgnitionEnabled = engineConfiguration->isIgnitionEnabled;
+ tsOutputChannels->isInjectionEnabled = engineConfiguration->isInjectionEnabled;
+ tsOutputChannels->isCylinderCleanupEnabled = engineConfiguration->isCylinderCleanupEnabled;
+ tsOutputChannels->isCylinderCleanupActivated = engine->isCylinderCleanupMode;
+ tsOutputChannels->secondTriggerChannelEnabled = engineConfiguration->secondTriggerChannelEnabled;
+#if EFI_VEHICLE_SPEED || defined(__DOXYGEN__)
+ float vehicleSpeed = getVehicleSpeed();
+ tsOutputChannels->vehicleSpeedKph = vehicleSpeed;
+ tsOutputChannels->speedToRpmRatio = vehicleSpeed / rpm;
+
+#endif /* EFI_VEHICLE_SPEED */
+ tsOutputChannels->isCltError = !isValidCoolantTemperature(getCoolantTemperature(PASS_ENGINE_PARAMETER_F));
+ tsOutputChannels->isIatError = !isValidIntakeAirTemperature(getIntakeAirTemperature(PASS_ENGINE_PARAMETER_F));
+#endif /* EFI_PROD_CODE */
+
+ tsOutputChannels->warningCounter = engine->engineState.warningCounter;
+ tsOutputChannels->lastErrorCode = engine->engineState.lastErrorCode;
+
+ tsOutputChannels->knockNowIndicator = engine->knockCount > 0;
+ tsOutputChannels->knockEverIndicator = engine->knockEver;
+
+ tsOutputChannels->clutchUpState = engine->clutchUpState;
+ tsOutputChannels->clutchDownState = engine->clutchDownState;
+ tsOutputChannels->tCharge = getTCharge(rpm, tps, coolant, intake PASS_ENGINE_PARAMETER);
+ float timing = engine->engineState.timingAdvance;
+ tsOutputChannels->ignitionAdvance = timing > 360 ? timing - 720 : timing;
+ tsOutputChannels->sparkDwell = ENGINE(engineState.sparkDwell);
+ tsOutputChannels->crankingFuelMs = getCrankingFuel(PASS_ENGINE_PARAMETER_F);
+ tsOutputChannels->chargeAirMass = engine->engineState.airMass;
+}
+
+extern TunerStudioOutputChannels tsOutputChannels;
+
+void prepareTunerStudioOutputs(void) {
+ // sensor state for EFI Analytics Tuner Studio
+ updateTunerStudioState(&tsOutputChannels PASS_ENGINE_PARAMETER);
+}
+
+#endif /* EFI_TUNER_STUDIO */
+
+static void subscribe(int outputOrdinal) {
+ subscription[outputOrdinal] = true;
+}
+
+static void unsubscribe(int outputOrdinal) {
+ subscription[outputOrdinal] = false;
+}
+
+void initStatusLoop(Engine *engine) {
+ setFullLog(INITIAL_FULL_LOG);
+ addConsoleActionI(FULL_LOGGING_KEY, setFullLog);
+ addConsoleActionI("warn", setWarningEnabled);
+
+#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
+ addConsoleActionFF("fuelinfo2", (VoidFloatFloat) showFuelInfo2);
+ addConsoleAction("fuelinfo", showFuelInfo);
+#endif
+
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ subscription[(int) RO_TRG1_DUTY] = true;
+ subscription[(int) RO_TRG2_DUTY] = true;
+ subscription[(int) RO_TRG3_DUTY] = false;
+ subscription[(int) RO_TRG4_DUTY] = false;
+ subscription[(int) RO_TOTAL_REVOLUTION_COUNTER] = true;
+ subscription[(int) RO_RUNNING_REVOLUTION_COUNTER] = false;
+
+ addConsoleActionI("subscribe", subscribe);
+ addConsoleActionI("unsubscribe", unsubscribe);
+ addConsoleActionI("set_led_blinking_period", setBlinkingPeriod);
+
+ addConsoleAction("status", printStatus);
+#endif /* EFI_PROD_CODE */
+}
+
+void startStatusThreads(Engine *engine) {
+ // todo: refactoring needed, this file should probably be split into pieces
+ chThdCreateStatic(lcdThreadStack, sizeof(lcdThreadStack), NORMALPRIO, (tfunc_t) lcdThread, engine);
+#if EFI_PROD_CODE || defined(__DOXYGEN__)
+ initStatusLeds();
+ chThdCreateStatic(blinkingStack, sizeof(blinkingStack), NORMALPRIO, (tfunc_t) blinkingThread, NULL);
+#endif /* EFI_PROD_CODE */
+}
+
+void setFullLog(int value) {
+ print("Setting full logging: %s\r\n", boolToString(value));
+ printMsg(&logger, "%s%d", FULL_LOGGING_KEY, value);
+ fullLog = value;
+}
+
+bool getFullLog(void) {
+ return fullLog;
+}
diff --git a/firmware/controllers/algo/engine_configuration_generated_structures.h b/firmware/controllers/algo/engine_configuration_generated_structures.h
index b19162c15c..070046b632 100644
--- a/firmware/controllers/algo/engine_configuration_generated_structures.h
+++ b/firmware/controllers/algo/engine_configuration_generated_structures.h
@@ -1,2060 +1,2060 @@
-// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Mar 17 16:41:29 EDT 2017
-// begin
-#ifndef ENGINE_CONFIGURATION_GENERATED_H_
-#define ENGINE_CONFIGURATION_GENERATED_H_
+// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Mar 17 16:41:29 EDT 2017
+// begin
+#ifndef ENGINE_CONFIGURATION_GENERATED_H_
+#define ENGINE_CONFIGURATION_GENERATED_H_
#include "rusefi_types.h"
-typedef struct {
- /**
- * offset 0
- */
- float pFactor;
- /**
- * offset 4
- */
- float iFactor;
- /**
- * offset 8
- */
- float dFactor;
- /**
- * Linear addition to PID logic
- * offset 12
- */
- float offset;
- /** total size 16*/
-} pid_s;
-
-typedef struct {
- /**
- * Fuel squirt duration while cranking
- * A number of curves adjust this value according to CLT/IAT/TPS etc
- * offset 0
- */
- float baseFuel;
- /**
- * Cranking mode threshold. Special cranking logic controls fuel and spark while RPM is below this threshold
- * set cranking_rpm X
- * offset 4
- */
- int16_t rpm;
- /**
- * need 4 byte alignment
- * offset 6
- */
+typedef struct {
+ /**
+ * offset 0
+ */
+ float pFactor;
+ /**
+ * offset 4
+ */
+ float iFactor;
+ /**
+ * offset 8
+ */
+ float dFactor;
+ /**
+ * Linear addition to PID logic
+ * offset 12
+ */
+ float offset;
+ /** total size 16*/
+} pid_s;
+
+typedef struct {
+ /**
+ * Fuel squirt duration while cranking
+ * A number of curves adjust this value according to CLT/IAT/TPS etc
+ * offset 0
+ */
+ float baseFuel;
+ /**
+ * Cranking mode threshold. Special cranking logic controls fuel and spark while RPM is below this threshold
+ * set cranking_rpm X
+ * offset 4
+ */
+ int16_t rpm;
+ /**
+ * need 4 byte alignment
+ * offset 6
+ */
uint8_t alignmentFill[2];
- /** total size 8*/
-} cranking_parameters_s;
-
-typedef struct {
- /**
- * kPa value at low volts
- * offset 0
- */
- float lowValue;
- /**
- * kPa value at high volts
- * offset 4
- */
- float highValue;
- /**
- * offset 8
- */
- air_pressure_sensor_type_e type;
- /**
- * offset 12
- */
- adc_channel_e hwChannel;
- /** total size 16*/
-} air_pressure_sensor_config_s;
-
-/**
- * @brief MAP averaging configuration
-
-*/
-typedef struct {
- /**
- * offset 0
- */
+ /** total size 8*/
+} cranking_parameters_s;
+
+typedef struct {
+ /**
+ * kPa value at low volts
+ * offset 0
+ */
+ float lowValue;
+ /**
+ * kPa value at high volts
+ * offset 4
+ */
+ float highValue;
+ /**
+ * offset 8
+ */
+ air_pressure_sensor_type_e type;
+ /**
+ * offset 12
+ */
+ adc_channel_e hwChannel;
+ /** total size 16*/
+} air_pressure_sensor_config_s;
+
+/**
+ * @brief MAP averaging configuration
+
+*/
+typedef struct {
+ /**
+ * offset 0
+ */
float samplingAngleBins[MAP_ANGLE_SIZE];
- /**
- * @brief MAP averaging sampling start angle, by RPM
- * offset 32
- */
+ /**
+ * @brief MAP averaging sampling start angle, by RPM
+ * offset 32
+ */
float samplingAngle[MAP_ANGLE_SIZE];
- /**
- * offset 64
- */
+ /**
+ * offset 64
+ */
float samplingWindowBins[MAP_WINDOW_SIZE];
- /**
- * @brief MAP averaging angle duration, by RPM
- * offset 96
- */
+ /**
+ * @brief MAP averaging angle duration, by RPM
+ * offset 96
+ */
float samplingWindow[MAP_WINDOW_SIZE];
- /**
- * offset 128
- */
- air_pressure_sensor_config_s sensor;
- /** total size 144*/
-} MAP_sensor_config_s;
-
-/**
- * @brief Thermistor known values
-
-*/
-typedef struct {
- /**
- * these values are in Celcuus
- * offset 0
- */
- float tempC_1;
- /**
- * offset 4
- */
- float tempC_2;
- /**
- * offset 8
- */
- float tempC_3;
- /**
- * offset 12
- */
- float resistance_1;
- /**
- * offset 16
- */
- float resistance_2;
- /**
- * offset 20
- */
- float resistance_3;
- /**
- * offset 24
- */
- float bias_resistor;
- /** total size 28*/
-} thermistor_conf_s;
-
-/**
- * @brief Thermistor curve parameters
-
-*/
-typedef struct {
- /**
- * offset 0
- */
- thermistor_conf_s config;
- /**
- * offset 28
- */
- adc_channel_e adcChannel;
- /** total size 32*/
-} ThermistorConf;
-
-typedef struct {
- /**
- * cc/min, cubic centimeter per minute
- * By the way, g/s = 0.125997881 * (lb/hr)
- * g/s = 0.125997881 * (cc/min)/10.5
- * g/s = 0.0119997981 * cc/min
- * offset 0
- */
- float flow;
- /**
- * offset 4
- */
- float unusedlag;
- /**
- * offset 8
- */
+ /**
+ * offset 128
+ */
+ air_pressure_sensor_config_s sensor;
+ /** total size 144*/
+} MAP_sensor_config_s;
+
+/**
+ * @brief Thermistor known values
+
+*/
+typedef struct {
+ /**
+ * these values are in Celcuus
+ * offset 0
+ */
+ float tempC_1;
+ /**
+ * offset 4
+ */
+ float tempC_2;
+ /**
+ * offset 8
+ */
+ float tempC_3;
+ /**
+ * offset 12
+ */
+ float resistance_1;
+ /**
+ * offset 16
+ */
+ float resistance_2;
+ /**
+ * offset 20
+ */
+ float resistance_3;
+ /**
+ * offset 24
+ */
+ float bias_resistor;
+ /** total size 28*/
+} thermistor_conf_s;
+
+/**
+ * @brief Thermistor curve parameters
+
+*/
+typedef struct {
+ /**
+ * offset 0
+ */
+ thermistor_conf_s config;
+ /**
+ * offset 28
+ */
+ adc_channel_e adcChannel;
+ /** total size 32*/
+} ThermistorConf;
+
+typedef struct {
+ /**
+ * cc/min, cubic centimeter per minute
+ * By the way, g/s = 0.125997881 * (lb/hr)
+ * g/s = 0.125997881 * (cc/min)/10.5
+ * g/s = 0.0119997981 * cc/min
+ * offset 0
+ */
+ float flow;
+ /**
+ * offset 4
+ */
+ float unusedlag;
+ /**
+ * offset 8
+ */
float battLagCorrBins[VBAT_INJECTOR_CURVE_SIZE];
- /**
- * offset 40
- */
+ /**
+ * offset 40
+ */
float battLagCorr[VBAT_INJECTOR_CURVE_SIZE];
- /** total size 72*/
-} injector_s;
-
-typedef struct {
- /**
- * offset 0
- */
- float a0;
- /**
- * offset 4
- */
- float a1;
- /**
- * offset 8
- */
- float a2;
- /**
- * offset 12
- */
- float b1;
- /**
- * offset 16
- */
- float b2;
- /** total size 20*/
-} bi_quard_s;
-
-typedef struct {
- /**
- * Engine displacement, in liters
- * see also cylindersCount
- * offset 0
- */
- float displacement;
- /**
- * offset 4
- */
- cylinders_count_t cylindersCount;
- /**
- * offset 8
- */
- firing_order_e firingOrder;
- /** total size 12*/
-} specs_s;
-
-/**
- * @brief Trigger wheel(s) configuration
-
-*/
-typedef struct {
- /**
- * set trigger_type X
- * offset 0
- */
- trigger_type_e type;
- /**
- offset 4 bit 0 */
- bool unusedCustomIsSynchronizationNeeded : 1;
- /**
- offset 4 bit 1 */
- bool unusedCustomNeedSecondTriggerInput : 1;
- /**
- * This option could be used if your second trigger channel is broken
- offset 4 bit 2 */
- bool useOnlyFirstChannel : 1;
- /**
- * offset 8
- */
- int customTotalToothCount;
- /**
- * offset 12
- */
- int customSkippedToothCount;
- /**
- * offset 16
- */
- float unusedcustomSyncRatioFrom;
- /**
- * offset 20
- */
- float unusedcustomSyncRatioTo;
- /**
- * offset 24
- */
- bool32_t unusedcustomUseRiseEdge;
- /** total size 28*/
-} trigger_config_s;
-
-typedef struct {
- /**
- * offset 0
- */
- adc_channel_e hwChannel;
- /**
- * offset 4
- */
- float v1;
- /**
- * offset 8
- */
- float value1;
- /**
- * offset 12
- */
- float v2;
- /**
- * offset 16
- */
- float value2;
- /** total size 20*/
-} afr_sensor_s;
-
-typedef struct {
- /**
- * offset 0
- */
- brain_pin_e solenoidPin;
- /**
- * offset 4
- */
- pin_output_mode_e solenoidPinMode;
- /**
- * offset 8
- */
- int solenoidFrequency;
- /**
- * offset 12
- */
- brain_pin_e stepperDirectionPin;
- /**
- * offset 16
- */
- brain_pin_e stepperStepPin;
- /** total size 20*/
-} idle_hardware_s;
-
-typedef struct {
- /**
- * offset 0
- */
- idle_hardware_s idle;
- /**
- * value between 0 and 100 used in Manual mode
- * offset 20
- */
- float manIdlePosition;
- /**
- * offset 24
- */
- brain_pin_e fuelPumpPin;
- /**
- * offset 28
- */
- pin_output_mode_e fuelPumpPinMode;
- /**
- * offset 32
- */
+ /** total size 72*/
+} injector_s;
+
+typedef struct {
+ /**
+ * offset 0
+ */
+ float a0;
+ /**
+ * offset 4
+ */
+ float a1;
+ /**
+ * offset 8
+ */
+ float a2;
+ /**
+ * offset 12
+ */
+ float b1;
+ /**
+ * offset 16
+ */
+ float b2;
+ /** total size 20*/
+} bi_quard_s;
+
+typedef struct {
+ /**
+ * Engine displacement, in liters
+ * see also cylindersCount
+ * offset 0
+ */
+ float displacement;
+ /**
+ * offset 4
+ */
+ cylinders_count_t cylindersCount;
+ /**
+ * offset 8
+ */
+ firing_order_e firingOrder;
+ /** total size 12*/
+} specs_s;
+
+/**
+ * @brief Trigger wheel(s) configuration
+
+*/
+typedef struct {
+ /**
+ * set trigger_type X
+ * offset 0
+ */
+ trigger_type_e type;
+ /**
+ offset 4 bit 0 */
+ bool unusedCustomIsSynchronizationNeeded : 1;
+ /**
+ offset 4 bit 1 */
+ bool unusedCustomNeedSecondTriggerInput : 1;
+ /**
+ * This option could be used if your second trigger channel is broken
+ offset 4 bit 2 */
+ bool useOnlyFirstChannel : 1;
+ /**
+ * offset 8
+ */
+ int customTotalToothCount;
+ /**
+ * offset 12
+ */
+ int customSkippedToothCount;
+ /**
+ * offset 16
+ */
+ float unusedcustomSyncRatioFrom;
+ /**
+ * offset 20
+ */
+ float unusedcustomSyncRatioTo;
+ /**
+ * offset 24
+ */
+ bool32_t unusedcustomUseRiseEdge;
+ /** total size 28*/
+} trigger_config_s;
+
+typedef struct {
+ /**
+ * offset 0
+ */
+ adc_channel_e hwChannel;
+ /**
+ * offset 4
+ */
+ float v1;
+ /**
+ * offset 8
+ */
+ float value1;
+ /**
+ * offset 12
+ */
+ float v2;
+ /**
+ * offset 16
+ */
+ float value2;
+ /** total size 20*/
+} afr_sensor_s;
+
+typedef struct {
+ /**
+ * offset 0
+ */
+ brain_pin_e solenoidPin;
+ /**
+ * offset 4
+ */
+ pin_output_mode_e solenoidPinMode;
+ /**
+ * offset 8
+ */
+ int solenoidFrequency;
+ /**
+ * offset 12
+ */
+ brain_pin_e stepperDirectionPin;
+ /**
+ * offset 16
+ */
+ brain_pin_e stepperStepPin;
+ /** total size 20*/
+} idle_hardware_s;
+
+typedef struct {
+ /**
+ * offset 0
+ */
+ idle_hardware_s idle;
+ /**
+ * value between 0 and 100 used in Manual mode
+ * offset 20
+ */
+ float manIdlePosition;
+ /**
+ * offset 24
+ */
+ brain_pin_e fuelPumpPin;
+ /**
+ * offset 28
+ */
+ pin_output_mode_e fuelPumpPinMode;
+ /**
+ * offset 32
+ */
brain_pin_e injectionPins[INJECTION_PIN_COUNT];
- /**
- * offset 80
- */
- pin_output_mode_e injectionPinMode;
- /**
- * offset 84
- */
+ /**
+ * offset 80
+ */
+ pin_output_mode_e injectionPinMode;
+ /**
+ * offset 84
+ */
brain_pin_e ignitionPins[IGNITION_PIN_COUNT];
- /**
- * offset 132
- */
- pin_output_mode_e ignitionPinMode;
- /**
- * offset 136
- */
- brain_pin_e malfunctionIndicatorPin;
- /**
- * offset 140
- */
- pin_output_mode_e malfunctionIndicatorPinMode;
- /**
- * offset 144
- */
- brain_pin_e fanPin;
- /**
- * offset 148
- */
- pin_output_mode_e fanPinMode;
- /**
- * offset 152
- */
- float mapFrequency0Kpa;
- /**
- * offset 156
- */
- float mapFrequency100Kpa;
- /**
- * some cars have a switch to indicate that clutch pedal is all the way down
- * offset 160
- */
- brain_pin_e clutchDownPin;
- /**
- * offset 164
- */
- pin_input_mode_e clutchDownPinMode;
- /**
- * offset 168
- */
- brain_pin_e alternatorControlPin;
- /**
- * offset 172
- */
- pin_output_mode_e alternatorControlPinMode;
- /**
- * offset 176
- */
- brain_pin_e HD44780_rs;
- /**
- * offset 180
- */
- brain_pin_e HD44780_e;
- /**
- * offset 184
- */
- brain_pin_e HD44780_db4;
- /**
- * offset 188
- */
- brain_pin_e HD44780_db5;
- /**
- * offset 192
- */
- brain_pin_e HD44780_db6;
- /**
- * offset 196
- */
- brain_pin_e HD44780_db7;
- /**
- * offset 200
- */
- brain_pin_e gps_rx_pin;
- /**
- * offset 204
- */
- brain_pin_e gps_tx_pin;
- /**
- * offset 208
- */
- int triggerSimulatorFrequency;
- /**
- * Digital Potentiometer is used by stock ECU stimulation code
- * offset 212
- */
- spi_device_e digitalPotentiometerSpiDevice;
- /**
- * offset 216
- */
+ /**
+ * offset 132
+ */
+ pin_output_mode_e ignitionPinMode;
+ /**
+ * offset 136
+ */
+ brain_pin_e malfunctionIndicatorPin;
+ /**
+ * offset 140
+ */
+ pin_output_mode_e malfunctionIndicatorPinMode;
+ /**
+ * offset 144
+ */
+ brain_pin_e fanPin;
+ /**
+ * offset 148
+ */
+ pin_output_mode_e fanPinMode;
+ /**
+ * offset 152
+ */
+ float mapFrequency0Kpa;
+ /**
+ * offset 156
+ */
+ float mapFrequency100Kpa;
+ /**
+ * some cars have a switch to indicate that clutch pedal is all the way down
+ * offset 160
+ */
+ brain_pin_e clutchDownPin;
+ /**
+ * offset 164
+ */
+ pin_input_mode_e clutchDownPinMode;
+ /**
+ * offset 168
+ */
+ brain_pin_e alternatorControlPin;
+ /**
+ * offset 172
+ */
+ pin_output_mode_e alternatorControlPinMode;
+ /**
+ * offset 176
+ */
+ brain_pin_e HD44780_rs;
+ /**
+ * offset 180
+ */
+ brain_pin_e HD44780_e;
+ /**
+ * offset 184
+ */
+ brain_pin_e HD44780_db4;
+ /**
+ * offset 188
+ */
+ brain_pin_e HD44780_db5;
+ /**
+ * offset 192
+ */
+ brain_pin_e HD44780_db6;
+ /**
+ * offset 196
+ */
+ brain_pin_e HD44780_db7;
+ /**
+ * offset 200
+ */
+ brain_pin_e gps_rx_pin;
+ /**
+ * offset 204
+ */
+ brain_pin_e gps_tx_pin;
+ /**
+ * offset 208
+ */
+ int triggerSimulatorFrequency;
+ /**
+ * Digital Potentiometer is used by stock ECU stimulation code
+ * offset 212
+ */
+ spi_device_e digitalPotentiometerSpiDevice;
+ /**
+ * offset 216
+ */
brain_pin_e digitalPotentiometerChipSelect[DIGIPOT_COUNT];
- /**
- * offset 232
- */
- brain_pin_e etbDirectionPin1;
- /**
- * offset 236
- */
- brain_pin_e etbDirectionPin2;
- /**
- * offset 240
- */
- brain_pin_e etbControlPin1;
- /**
- * offset 244
- */
- brain_pin_e etbControlPin2;
- /**
- * offset 248
- */
- pin_output_mode_e electronicThrottlePin1Mode;
- /**
- * offset 252
- */
- brain_pin_e wboHeaterPin;
- /**
- * offset 256
- */
- brain_pin_e cj125CsPin;
- /**
- * offset 260
- */
- float fuelLevelEmptyTankVoltage;
- /**
- * offset 264
- */
- float fuelLevelFullTankVoltage;
- /**
- * AFR, WBO, EGO - whatever you like to call it
- * offset 268
- */
- ego_sensor_e afr_type;
- /**
- * offset 272
- */
- int etbDT;
- /**
- * offset 276
- */
- pin_output_mode_e hip9011CsPinMode;
- /**
- * This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin.
- * offset 280
- */
- brain_pin_e tachOutputPin;
- /**
- * offset 284
- */
- pin_output_mode_e tachOutputPinMode;
- /**
- * offset 288
- */
+ /**
+ * offset 232
+ */
+ brain_pin_e etbDirectionPin1;
+ /**
+ * offset 236
+ */
+ brain_pin_e etbDirectionPin2;
+ /**
+ * offset 240
+ */
+ brain_pin_e etbControlPin1;
+ /**
+ * offset 244
+ */
+ brain_pin_e etbControlPin2;
+ /**
+ * offset 248
+ */
+ pin_output_mode_e electronicThrottlePin1Mode;
+ /**
+ * offset 252
+ */
+ brain_pin_e wboHeaterPin;
+ /**
+ * offset 256
+ */
+ brain_pin_e cj125CsPin;
+ /**
+ * offset 260
+ */
+ float fuelLevelEmptyTankVoltage;
+ /**
+ * offset 264
+ */
+ float fuelLevelFullTankVoltage;
+ /**
+ * AFR, WBO, EGO - whatever you like to call it
+ * offset 268
+ */
+ ego_sensor_e afr_type;
+ /**
+ * offset 272
+ */
+ int etbDT;
+ /**
+ * offset 276
+ */
+ pin_output_mode_e hip9011CsPinMode;
+ /**
+ * This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin.
+ * offset 280
+ */
+ brain_pin_e tachOutputPin;
+ /**
+ * offset 284
+ */
+ pin_output_mode_e tachOutputPinMode;
+ /**
+ * offset 288
+ */
brain_input_pin_e triggerInputPins[3];
- /**
- * offset 300
- */
- brain_pin_e mainRelayPin;
- /**
- * offset 304
- */
- int idleThreadPeriod;
- /**
- * offset 308
- */
- int consoleLoopPeriod;
- /**
- * offset 312
- */
- int lcdThreadPeriod;
- /**
- * offset 316
- */
- brain_pin_e sdCardCsPin;
- /**
- * offset 320
- */
- int generalPeriodicThreadPeriod;
- /**
- * offset 324
- */
- uint32_t tunerStudioSerialSpeed;
- /**
- * offset 328
- */
- brain_pin_e boardTestModeJumperPin;
- /**
- * offset 332
- */
- can_device_mode_e canDeviceMode;
- /**
- * offset 336
- */
- brain_pin_e canTxPin;
- /**
- * offset 340
- */
- brain_pin_e canRxPin;
- /**
- * offset 344
- */
+ /**
+ * offset 300
+ */
+ brain_pin_e mainRelayPin;
+ /**
+ * offset 304
+ */
+ int idleThreadPeriod;
+ /**
+ * offset 308
+ */
+ int consoleLoopPeriod;
+ /**
+ * offset 312
+ */
+ int lcdThreadPeriod;
+ /**
+ * offset 316
+ */
+ brain_pin_e sdCardCsPin;
+ /**
+ * offset 320
+ */
+ int generalPeriodicThreadPeriod;
+ /**
+ * offset 324
+ */
+ uint32_t tunerStudioSerialSpeed;
+ /**
+ * offset 328
+ */
+ brain_pin_e boardTestModeJumperPin;
+ /**
+ * offset 332
+ */
+ can_device_mode_e canDeviceMode;
+ /**
+ * offset 336
+ */
+ brain_pin_e canTxPin;
+ /**
+ * offset 340
+ */
+ brain_pin_e canRxPin;
+ /**
+ * offset 344
+ */
brain_pin_e triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT];
- /**
- * offset 356
- */
+ /**
+ * offset 356
+ */
pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT];
- /**
- * offset 368
- */
- brain_pin_e o2heaterPin;
- /**
- * offset 372
- */
- pin_output_mode_e o2heaterPinModeTodO;
- /**
- offset 376 bit 0 */
- bool is_enabled_spi_1 : 1;
- /**
- offset 376 bit 1 */
- bool is_enabled_spi_2 : 1;
- /**
- offset 376 bit 2 */
- bool is_enabled_spi_3 : 1;
- /**
- offset 376 bit 3 */
- bool isSdCardEnabled : 1;
- /**
- offset 376 bit 4 */
- bool isFastAdcEnabled : 1;
- /**
- offset 376 bit 5 */
- bool isEngineControlEnabled : 1;
- /**
- offset 376 bit 6 */
- bool isHip9011Enabled : 1;
- /**
- offset 376 bit 7 */
- bool isVerboseAlternator : 1;
- /**
- offset 376 bit 8 */
- bool useSerialPort : 1;
- /**
- offset 376 bit 9 */
- bool useStepperIdle : 1;
- /**
- offset 376 bit 10 */
- bool enabledStep1Limiter : 1;
- /**
- offset 376 bit 11 */
- bool useTpicAdvancedMode : 1;
- /**
- offset 376 bit 12 */
- bool useLcdScreen : 1;
- /**
- offset 376 bit 13 */
- bool startConsoleInBinaryMode : 1;
- /**
- offset 376 bit 14 */
- bool useWarmupPidAfr : 1;
- /**
- offset 376 bit 15 */
- bool onOffAlternatorLogic : 1;
- /**
- offset 376 bit 16 */
- bool isCJ125Enabled : 1;
- /**
- * Use rise or fall signal front
- offset 376 bit 17 */
- bool vvtCamSensorUseRise : 1;
- /**
- * offset 380
- */
+ /**
+ * offset 368
+ */
+ brain_pin_e o2heaterPin;
+ /**
+ * offset 372
+ */
+ pin_output_mode_e o2heaterPinModeTodO;
+ /**
+ offset 376 bit 0 */
+ bool is_enabled_spi_1 : 1;
+ /**
+ offset 376 bit 1 */
+ bool is_enabled_spi_2 : 1;
+ /**
+ offset 376 bit 2 */
+ bool is_enabled_spi_3 : 1;
+ /**
+ offset 376 bit 3 */
+ bool isSdCardEnabled : 1;
+ /**
+ offset 376 bit 4 */
+ bool isFastAdcEnabled : 1;
+ /**
+ offset 376 bit 5 */
+ bool isEngineControlEnabled : 1;
+ /**
+ offset 376 bit 6 */
+ bool isHip9011Enabled : 1;
+ /**
+ offset 376 bit 7 */
+ bool isVerboseAlternator : 1;
+ /**
+ offset 376 bit 8 */
+ bool useSerialPort : 1;
+ /**
+ offset 376 bit 9 */
+ bool useStepperIdle : 1;
+ /**
+ offset 376 bit 10 */
+ bool enabledStep1Limiter : 1;
+ /**
+ offset 376 bit 11 */
+ bool useTpicAdvancedMode : 1;
+ /**
+ offset 376 bit 12 */
+ bool useLcdScreen : 1;
+ /**
+ offset 376 bit 13 */
+ bool startConsoleInBinaryMode : 1;
+ /**
+ offset 376 bit 14 */
+ bool useWarmupPidAfr : 1;
+ /**
+ offset 376 bit 15 */
+ bool onOffAlternatorLogic : 1;
+ /**
+ offset 376 bit 16 */
+ bool isCJ125Enabled : 1;
+ /**
+ * Use rise or fall signal front
+ offset 376 bit 17 */
+ bool vvtCamSensorUseRise : 1;
+ /**
+ * offset 380
+ */
brain_input_pin_e logicAnalyzerPins[LOGIC_ANALYZER_CHANNEL_COUNT];
- /**
- * default or inverted input
- * offset 396
- */
+ /**
+ * default or inverted input
+ * offset 396
+ */
uint8_t logicAnalyzerMode[LOGIC_ANALYZER_CHANNEL_COUNT];
- /**
- * offset 400
- */
- int unrealisticRpmThreashold;
- /**
- * offset 404
- */
- pin_output_mode_e mainRelayPinMode;
- /**
- * offset 408
- */
+ /**
+ * offset 400
+ */
+ int unrealisticRpmThreashold;
+ /**
+ * offset 404
+ */
+ pin_output_mode_e mainRelayPinMode;
+ /**
+ * offset 408
+ */
brain_pin_e max31855_cs[EGT_CHANNEL_COUNT];
- /**
- * offset 440
- */
- spi_device_e max31855spiDevice;
- /**
- * offset 444
- */
+ /**
+ * offset 440
+ */
+ spi_device_e max31855spiDevice;
+ /**
+ * offset 444
+ */
brain_pin_e fsioPins[LE_COMMAND_COUNT];
- /**
- * offset 508
- */
+ /**
+ * offset 508
+ */
pin_output_mode_e gpioPinModes[LE_COMMAND_COUNT];
- /**
- * offset 572
- */
- uart_device_e consoleUartDevice;
- /**
- * offset 576
- */
- int unused77;
- /**
- * offset 580
- */
- int unused78;
- /**
- * offset 584
- */
- float nb2ratioFrom;
- /**
- * offset 588
- */
- float nb2ratioTo;
- /**
- * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
- * offset 592
- */
- brain_pin_e triggerErrorPin;
- /**
- * offset 596
- */
- pin_output_mode_e triggerErrorPinMode;
- /**
- * offset 600
- */
- brain_pin_e acRelayPin;
- /**
- * offset 604
- */
- pin_output_mode_e acRelayPinMode;
- /**
- * offset 608
- */
+ /**
+ * offset 572
+ */
+ uart_device_e consoleUartDevice;
+ /**
+ * offset 576
+ */
+ int unused77;
+ /**
+ * offset 580
+ */
+ int unused78;
+ /**
+ * offset 584
+ */
+ float nb2ratioFrom;
+ /**
+ * offset 588
+ */
+ float nb2ratioTo;
+ /**
+ * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
+ * offset 592
+ */
+ brain_pin_e triggerErrorPin;
+ /**
+ * offset 596
+ */
+ pin_output_mode_e triggerErrorPinMode;
+ /**
+ * offset 600
+ */
+ brain_pin_e acRelayPin;
+ /**
+ * offset 604
+ */
+ pin_output_mode_e acRelayPinMode;
+ /**
+ * offset 608
+ */
fsio_pwm_freq_t fsioFrequency[LE_COMMAND_COUNT];
- /**
- * offset 640
- */
- brain_pin_e hip9011CsPin;
- /**
- * offset 644
- */
- brain_pin_e hip9011IntHoldPin;
- /**
- * offset 648
- */
- pin_output_mode_e hip9011IntHoldPinMode;
- /**
- * offset 652
- */
+ /**
+ * offset 640
+ */
+ brain_pin_e hip9011CsPin;
+ /**
+ * offset 644
+ */
+ brain_pin_e hip9011IntHoldPin;
+ /**
+ * offset 648
+ */
+ pin_output_mode_e hip9011IntHoldPinMode;
+ /**
+ * offset 652
+ */
fsio_setting_t fsio_setting[LE_COMMAND_COUNT];
- /**
- * offset 716
- */
- brain_pin_e spi1mosiPin;
- /**
- * offset 720
- */
- brain_pin_e spi1misoPin;
- /**
- * offset 724
- */
- brain_pin_e spi1sckPin;
- /**
- * offset 728
- */
- brain_pin_e spi2mosiPin;
- /**
- * offset 732
- */
- brain_pin_e spi2misoPin;
- /**
- * offset 736
- */
- brain_pin_e spi2sckPin;
- /**
- * offset 740
- */
- brain_pin_e spi3mosiPin;
- /**
- * offset 744
- */
- brain_pin_e spi3misoPin;
- /**
- * offset 748
- */
- brain_pin_e spi3sckPin;
- /**
- * offset 752
- */
- float hip9011Gain;
- /**
- * offset 756
- */
- brain_pin_e joystickCenterPin;
- /**
- * offset 760
- */
- brain_pin_e joystickAPin;
- /**
- * offset 764
- */
- brain_pin_e joystickBPin;
- /**
- * offset 768
- */
- brain_pin_e joystickCPin;
- /**
- * offset 772
- */
- brain_pin_e joystickDPin;
- /**
- * rusEfi console Sensor Sniffer mode
- * offset 776
- */
- sensor_chart_e sensorChartMode;
- /**
- * offset 780
- */
- maf_sensor_type_e mafSensorType;
- /**
- * offset 784
- */
- brain_input_pin_e vehicleSpeedSensorInputPin;
- /**
- * Some vehicles have a switch to indicate that clutch pedal is all the way up
- * offset 788
- */
- brain_pin_e clutchUpPin;
- /**
- * offset 792
- */
- pin_input_mode_e clutchUpPinMode;
- /**
- * These input pins allow us to pull toggle buttons state
- * offset 796
- */
+ /**
+ * offset 716
+ */
+ brain_pin_e spi1mosiPin;
+ /**
+ * offset 720
+ */
+ brain_pin_e spi1misoPin;
+ /**
+ * offset 724
+ */
+ brain_pin_e spi1sckPin;
+ /**
+ * offset 728
+ */
+ brain_pin_e spi2mosiPin;
+ /**
+ * offset 732
+ */
+ brain_pin_e spi2misoPin;
+ /**
+ * offset 736
+ */
+ brain_pin_e spi2sckPin;
+ /**
+ * offset 740
+ */
+ brain_pin_e spi3mosiPin;
+ /**
+ * offset 744
+ */
+ brain_pin_e spi3misoPin;
+ /**
+ * offset 748
+ */
+ brain_pin_e spi3sckPin;
+ /**
+ * offset 752
+ */
+ float hip9011Gain;
+ /**
+ * offset 756
+ */
+ brain_pin_e joystickCenterPin;
+ /**
+ * offset 760
+ */
+ brain_pin_e joystickAPin;
+ /**
+ * offset 764
+ */
+ brain_pin_e joystickBPin;
+ /**
+ * offset 768
+ */
+ brain_pin_e joystickCPin;
+ /**
+ * offset 772
+ */
+ brain_pin_e joystickDPin;
+ /**
+ * rusEfi console Sensor Sniffer mode
+ * offset 776
+ */
+ sensor_chart_e sensorChartMode;
+ /**
+ * offset 780
+ */
+ maf_sensor_type_e mafSensorType;
+ /**
+ * offset 784
+ */
+ brain_input_pin_e vehicleSpeedSensorInputPin;
+ /**
+ * Some vehicles have a switch to indicate that clutch pedal is all the way up
+ * offset 788
+ */
+ brain_pin_e clutchUpPin;
+ /**
+ * offset 792
+ */
+ pin_input_mode_e clutchUpPinMode;
+ /**
+ * These input pins allow us to pull toggle buttons state
+ * offset 796
+ */
brain_pin_e fsioDigitalInputs[LE_COMMAND_COUNT];
- /**
- * offset 860
- */
- brain_input_pin_e frequencyReportingMapInputPin;
- /** total size 864*/
-} board_configuration_s;
-
-typedef struct {
- /**
- * http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
- * set engine_type X
- * offset 0
- */
- engine_type_e engineType;
- /**
- * Engine sniffer would be disabled above this rpm
- * set engineSnifferRpmThreshold X
- * offset 4
- */
- int engineSnifferRpmThreshold;
- /**
- * offset 8
- */
- injector_s injector;
- /**
- * Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?
- * PS: Funny name, right? :)
- offset 80 bit 0 */
- bool directSelfStimulation : 1;
- /**
- offset 80 bit 1 */
- bool activateAuxPid1 : 1;
- /**
- offset 80 bit 2 */
- bool isVerboseAuxPid1 : 1;
- /**
- offset 80 bit 3 */
- bool activateAuxPid2 : 1;
- /**
- offset 80 bit 4 */
- bool isVerboseAuxPid2 : 1;
- /**
- offset 80 bit 5 */
- bool activateAuxPid3 : 1;
- /**
- offset 80 bit 6 */
- bool isVerboseAuxPid3 : 1;
- /**
- offset 80 bit 7 */
- bool activateAuxPid4 : 1;
- /**
- offset 80 bit 8 */
- bool isVerboseAuxPid4 : 1;
- /**
- offset 80 bit 9 */
- bool useBiQuadAnalogFiltering : 1;
- /**
- offset 80 bit 10 */
- bool issue_294_10 : 1;
- /**
- offset 80 bit 11 */
- bool issue_294_11 : 1;
- /**
- offset 80 bit 12 */
- bool issue_294_12 : 1;
- /**
- offset 80 bit 13 */
- bool issue_294_13 : 1;
- /**
- offset 80 bit 14 */
- bool issue_294_14 : 1;
- /**
- offset 80 bit 15 */
- bool issue_294_15 : 1;
- /**
- offset 80 bit 16 */
- bool issue_294_16 : 1;
- /**
- offset 80 bit 17 */
- bool issue_294_17 : 1;
- /**
- offset 80 bit 18 */
- bool issue_294_18 : 1;
- /**
- offset 80 bit 19 */
- bool issue_294_19 : 1;
- /**
- offset 80 bit 20 */
- bool issue_294_21 : 1;
- /**
- offset 80 bit 21 */
- bool issue_294_22 : 1;
- /**
- offset 80 bit 22 */
- bool issue_294_23 : 1;
- /**
- offset 80 bit 23 */
- bool issue_294_24 : 1;
- /**
- offset 80 bit 24 */
- bool issue_294_25 : 1;
- /**
- offset 80 bit 25 */
- bool issue_294_26 : 1;
- /**
- offset 80 bit 26 */
- bool issue_294_27 : 1;
- /**
- offset 80 bit 27 */
- bool issue_294_28 : 1;
- /**
- offset 80 bit 28 */
- bool issue_294_29 : 1;
- /**
- * Closed throttle. todo: extract these two fields into a structure
- * todo: we need two sets of TPS parameters - modern ETBs have two sensors
- * offset 84
- */
- int16_t tpsMin;
- /**
- * Full throtle. tpsMax value as 10 bit ADC value. Not Voltage!
- * offset 86
- */
- int16_t tpsMax;
- /**
- * TPS error detection, what TPS % value is unrealistically low
- * offset 88
- */
- int16_t tpsErrorDetectionTooLow;
- /**
- * offset 90
- */
- int16_t tpsErrorDetectionTooHigh;
- /**
- * offset 92
- */
- cranking_parameters_s cranking;
- /**
- * offset 100
- */
- float primingSquirtDurationMs;
- /**
- * offset 104
- */
- float ignitionDwellForCrankingMs;
- /**
- * While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft
- * degrees, not in absolute time as in running mode.
- * set cranking_charge_angle X
- * offset 108
- */
- float crankingChargeAngle;
- /**
- * @see hasMapSensor
- * @see isMapAveragingEnabled
- * offset 112
- */
- MAP_sensor_config_s map;
- /**
- * todo: merge with channel settings, use full-scale Thermistor here!
- * offset 256
- */
- ThermistorConf clt;
- /**
- * offset 288
- */
- ThermistorConf iat;
- /**
- * A secondary Rev limit engaged by the driver to help launch the vehicle faster
- * offset 320
- */
- int step1rpm;
- /**
- * offset 324
- */
- int step1timing;
- /**
- * 6=8MHz todo solit two bit fields
- * offset 328
- */
- int hip9011PrescalerAndSDO;
- /**
- * kHz knock band override
- * offset 332
- */
- float knockBandCustom;
- /**
- * offset 336
- */
+ /**
+ * offset 860
+ */
+ brain_input_pin_e frequencyReportingMapInputPin;
+ /** total size 864*/
+} board_configuration_s;
+
+typedef struct {
+ /**
+ * http://rusefi.com/wiki/index.php?title=Manual:Engine_Type
+ * set engine_type X
+ * offset 0
+ */
+ engine_type_e engineType;
+ /**
+ * Engine sniffer would be disabled above this rpm
+ * set engineSnifferRpmThreshold X
+ * offset 4
+ */
+ int engineSnifferRpmThreshold;
+ /**
+ * offset 8
+ */
+ injector_s injector;
+ /**
+ * Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?
+ * PS: Funny name, right? :)
+ offset 80 bit 0 */
+ bool directSelfStimulation : 1;
+ /**
+ offset 80 bit 1 */
+ bool activateAuxPid1 : 1;
+ /**
+ offset 80 bit 2 */
+ bool isVerboseAuxPid1 : 1;
+ /**
+ offset 80 bit 3 */
+ bool activateAuxPid2 : 1;
+ /**
+ offset 80 bit 4 */
+ bool isVerboseAuxPid2 : 1;
+ /**
+ offset 80 bit 5 */
+ bool activateAuxPid3 : 1;
+ /**
+ offset 80 bit 6 */
+ bool isVerboseAuxPid3 : 1;
+ /**
+ offset 80 bit 7 */
+ bool activateAuxPid4 : 1;
+ /**
+ offset 80 bit 8 */
+ bool isVerboseAuxPid4 : 1;
+ /**
+ offset 80 bit 9 */
+ bool useBiQuadAnalogFiltering : 1;
+ /**
+ offset 80 bit 10 */
+ bool issue_294_10 : 1;
+ /**
+ offset 80 bit 11 */
+ bool issue_294_11 : 1;
+ /**
+ offset 80 bit 12 */
+ bool issue_294_12 : 1;
+ /**
+ offset 80 bit 13 */
+ bool issue_294_13 : 1;
+ /**
+ offset 80 bit 14 */
+ bool issue_294_14 : 1;
+ /**
+ offset 80 bit 15 */
+ bool issue_294_15 : 1;
+ /**
+ offset 80 bit 16 */
+ bool issue_294_16 : 1;
+ /**
+ offset 80 bit 17 */
+ bool issue_294_17 : 1;
+ /**
+ offset 80 bit 18 */
+ bool issue_294_18 : 1;
+ /**
+ offset 80 bit 19 */
+ bool issue_294_19 : 1;
+ /**
+ offset 80 bit 20 */
+ bool issue_294_21 : 1;
+ /**
+ offset 80 bit 21 */
+ bool issue_294_22 : 1;
+ /**
+ offset 80 bit 22 */
+ bool issue_294_23 : 1;
+ /**
+ offset 80 bit 23 */
+ bool issue_294_24 : 1;
+ /**
+ offset 80 bit 24 */
+ bool issue_294_25 : 1;
+ /**
+ offset 80 bit 25 */
+ bool issue_294_26 : 1;
+ /**
+ offset 80 bit 26 */
+ bool issue_294_27 : 1;
+ /**
+ offset 80 bit 27 */
+ bool issue_294_28 : 1;
+ /**
+ offset 80 bit 28 */
+ bool issue_294_29 : 1;
+ /**
+ * Closed throttle. todo: extract these two fields into a structure
+ * todo: we need two sets of TPS parameters - modern ETBs have two sensors
+ * offset 84
+ */
+ int16_t tpsMin;
+ /**
+ * Full throtle. tpsMax value as 10 bit ADC value. Not Voltage!
+ * offset 86
+ */
+ int16_t tpsMax;
+ /**
+ * TPS error detection, what TPS % value is unrealistically low
+ * offset 88
+ */
+ int16_t tpsErrorDetectionTooLow;
+ /**
+ * offset 90
+ */
+ int16_t tpsErrorDetectionTooHigh;
+ /**
+ * offset 92
+ */
+ cranking_parameters_s cranking;
+ /**
+ * offset 100
+ */
+ float primingSquirtDurationMs;
+ /**
+ * offset 104
+ */
+ float ignitionDwellForCrankingMs;
+ /**
+ * While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft
+ * degrees, not in absolute time as in running mode.
+ * set cranking_charge_angle X
+ * offset 108
+ */
+ float crankingChargeAngle;
+ /**
+ * @see hasMapSensor
+ * @see isMapAveragingEnabled
+ * offset 112
+ */
+ MAP_sensor_config_s map;
+ /**
+ * todo: merge with channel settings, use full-scale Thermistor here!
+ * offset 256
+ */
+ ThermistorConf clt;
+ /**
+ * offset 288
+ */
+ ThermistorConf iat;
+ /**
+ * A secondary Rev limit engaged by the driver to help launch the vehicle faster
+ * offset 320
+ */
+ int step1rpm;
+ /**
+ * offset 324
+ */
+ int step1timing;
+ /**
+ * 6=8MHz todo solit two bit fields
+ * offset 328
+ */
+ int hip9011PrescalerAndSDO;
+ /**
+ * kHz knock band override
+ * offset 332
+ */
+ float knockBandCustom;
+ /**
+ * offset 336
+ */
float sparkDwellRpmBins[DWELL_CURVE_SIZE];
- /**
- * offset 368
- */
+ /**
+ * offset 368
+ */
float sparkDwellValues[DWELL_CURVE_SIZE];
- /**
- * offset 400
- */
- specs_s specs;
- /**
- * Cylinder diameter, in mm.
- * offset 412
- */
- float cylinderBore;
- /**
- * Disable sensor sniffer above this rpm
- * offset 416
- */
- int sensorSnifferRpmThreshold;
- /**
- * offset 420
- */
- int rpmHardLimit;
- /**
- * This setting controls which fuel quantity control algorithm is used.
- * set algorithm X
- * offset 424
- */
- engine_load_mode_e fuelAlgorithm;
- /**
- * offset 428
- */
- injection_mode_e crankingInjectionMode;
- /**
- * 'batched' means two injectors are wired together
- * set injection_mode X
- * offset 432
- */
- injection_mode_e injectionMode;
- /**
- * this is about deciding when the injector starts it's squirt
- * See also injectionPhase map
- * todo: do we need even need this since we have the map anyway?
- * offset 436
- */
- angle_t extraInjectionOffset;
- /**
- * Timing advance while engine cranking
- * set cranking_timing_angle X
- * offset 440
- */
- angle_t crankingTimingAngle;
- /**
- * 'wasted' means one coil is driving two spark plugs in two cylinders, with one of the aparks not doing anything since it's happening on the exhaust cycle
- * set ignition_mode X
- * offset 444
- */
- ignition_mode_e ignitionMode;
- /**
- * this value could be used to offset the whole ignition timing table by a constant
- * offset 448
- */
- angle_t ignitionOffset;
- /**
- * offset 452
- */
- timing_mode_e timingMode;
- /**
- * This value is used in 'fixed timing' mode, i.e. constant timing
- * This mode is useful for instance while adjusting distributor location
- * offset 456
- */
- angle_t fixedModeTiming;
- /**
- * Angle between Top Dead Center (TDC) and the first trigger event.
- * Knowing this angle allows us to control timing and other angles in reference to TDC.
- * set global_trigger_offset_angle X
- * offset 460
- */
- angle_t globalTriggerAngleOffset;
- /**
- * Coefficient of input voltage dividers on your PCB
- * offset 464
- */
- float analogInputDividerCoefficient;
- /**
- * Battery Voltage input resistor divider coefficient
- * offset 468
- */
- float vbattDividerCoeff;
- /**
- * offset 472
- */
- adc_channel_e vbattAdcChannel;
- /**
- * Cooling fan turn-on temperature threshold, in Celsuis
- * offset 476
- */
- float fanOnTemperature;
- /**
- * Cooling fan turn-off temperature threshold, in Celsuis
- * offset 480
- */
- float fanOffTemperature;
- /**
- * offset 484
- */
- adc_channel_e fuelLevelSensor;
- /**
- * This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h
- * offset 488
- */
- float vehicleSpeedCoef;
- /**
- * set can_mode X
- * offset 492
- */
- can_nbc_e canNbcType;
- /**
- * CANbus thread period, ms
- * offset 496
- */
- int canSleepPeriod;
- /**
- * See engineCycle
- * set operation_mode X
- * offset 500
- */
- operation_mode_e operationMode;
- /**
- * offset 504
- */
- display_mode_e displayMode;
- /**
- * offset 508
- */
- log_format_e logFormat;
- /**
- * offset 512
- */
- int byFirmwareVersion;
- /**
- * offset 516
- */
- int HD44780width;
- /**
- * offset 520
- */
- int HD44780height;
- /**
- * offset 524
- */
- adc_channel_e tpsAdcChannel;
- /**
- * offset 528
- */
- int overrideCrankingIgnition;
- /**
- * offset 532
- */
- int sensorChartFrequency;
- /**
- * offset 536
- */
- trigger_config_s trigger;
- /**
- * offset 564
- */
- spi_device_e hip9011SpiDevice;
- /**
- * offset 568
- */
- float globalFuelCorrection;
- /**
- * offset 572
- */
- int16_t pedalPositionMin;
- /**
- * offset 574
- */
- int16_t pedalPositionMax;
- /**
- * maximum total number of degrees to subtract from ignition advance
- * when knocking
- * offset 576
- */
- float maxKnockSubDeg;
- /**
- * See hasMafSensor
- * offset 580
- */
- adc_channel_e mafAdcChannel;
- /**
- * offset 584
- */
- afr_sensor_s afr;
- /**
- * offset 604
- */
- adc_channel_e pedalPositionChannel;
- /**
- * @see hasBaroSensor
- * offset 608
- */
- air_pressure_sensor_config_s baroSensor;
- /**
- * offset 624
- */
- board_configuration_s bc;
- /**
- offset 1488 bit 0 */
- bool vvtDisplayInverted : 1;
- /**
- offset 1488 bit 1 */
- bool fuelClosedLoopCorrectionEnabled : 1;
- /**
- offset 1488 bit 2 */
- bool unusedBit__5 : 1;
- /**
- offset 1488 bit 3 */
- bool unusedBit__6 : 1;
- /**
- offset 1488 bit 4 */
- bool useConstantDwellDuringCranking : 1;
- /**
- * This options enables data for 'engine sniffer' tab in console, which comes at some CPU price
- offset 1488 bit 5 */
- bool isEngineChartEnabled : 1;
- /**
- offset 1488 bit 6 */
- bool unusedBit_7 : 1;
- /**
- offset 1488 bit 7 */
- bool unusedBit__2 : 1;
- /**
- offset 1488 bit 8 */
- bool canReadEnabled : 1;
- /**
- offset 1488 bit 9 */
- bool canWriteEnabled : 1;
- /**
- offset 1488 bit 10 */
- bool unusedBit_123 : 1;
- /**
- offset 1488 bit 11 */
- bool unusedbit_9 : 1;
- /**
- offset 1488 bit 12 */
- bool unusedbit_10 : 1;
- /**
- offset 1488 bit 13 */
- bool isAlternatorControlEnabled : 1;
- /**
- offset 1488 bit 14 */
- bool unusedBit__3 : 1;
- /**
- offset 1488 bit 15 */
- bool unusedbit_8 : 1;
- /**
- offset 1488 bit 16 */
- bool cutFuelOnHardLimit : 1;
- /**
- offset 1488 bit 17 */
- bool cutSparkOnHardLimit : 1;
- /**
- offset 1488 bit 18 */
- bool step1fuelCutEnable : 1;
- /**
- offset 1488 bit 19 */
- bool step1SparkCutEnable : 1;
- /**
- offset 1488 bit 20 */
- bool hasFrequencyReportingMapSensor : 1;
- /**
- * offset 1492
- */
- adc_channel_e hipOutputChannel;
- /**
- * offset 1496
- */
- idle_mode_e idleMode;
- /**
- * enable injection
- offset 1500 bit 0 */
- bool isInjectionEnabled : 1;
- /**
- * enable ignition
- offset 1500 bit 1 */
- bool isIgnitionEnabled : 1;
- /**
- * If TPS above 95% no fuel would be injected during cranking
- * enable cylinder_cleanup
- offset 1500 bit 2 */
- bool isCylinderCleanupEnabled : 1;
- /**
- offset 1500 bit 3 */
- bool secondTriggerChannelEnabled : 1;
- /**
- offset 1500 bit 4 */
- bool needSecondTriggerInputDeprecated : 1;
- /**
- offset 1500 bit 5 */
- bool isMapAveragingEnabled : 1;
- /**
- offset 1500 bit 6 */
- bool anotherUnusedBit1 : 1;
- /**
- offset 1500 bit 7 */
- bool anotherUnusedBit2 : 1;
- /**
- offset 1500 bit 8 */
- bool isTunerStudioEnabled : 1;
- /**
- offset 1500 bit 9 */
- bool isWaveAnalyzerEnabled : 1;
- /**
- offset 1500 bit 10 */
- bool anotherUnusedBit212 : 1;
- /**
- * enable trigger_details
- offset 1500 bit 11 */
- bool isPrintTriggerSynchDetails : 1;
- /**
- * Usually if we have no trigger events that means engine is stopped
- * Unless we are troubleshooting and spinning the engine by hand - this case a longer
- * delay is needed
- offset 1500 bit 12 */
- bool isManualSpinningMode : 1;
- /**
- * This is needed if batched injection and individual injector wiring
- * enable two_wire_batch_injection
- offset 1500 bit 13 */
- bool twoWireBatchInjection : 1;
- /**
- * VR sensors are only precise on rising front
- * enable trigger_only_front
- offset 1500 bit 14 */
- bool useOnlyRisingEdgeForTrigger : 1;
- /**
- * This is needed if batched igniton (waster spark) and individual coil wiring
- offset 1500 bit 15 */
- bool twoWireBatchIgnition : 1;
- /**
- * offset 1504
- */
- uint32_t engineChartSize;
- /**
- * offset 1508
- */
- int targetIdleRpm;
- /**
- * A/C button input handled as analog input
- * offset 1512
- */
- adc_channel_e acSwitchAdc;
- /**
- * At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback.
- * offset 1516
- */
- int ignMathCalculateAtIndex;
- /**
- * offset 1520
- */
- int16_t acCutoffLowRpm;
- /**
- * offset 1522
- */
- int16_t acCutoffHighRpm;
- /**
- * offset 1524
- */
- int16_t acIdleRpmBump;
- /**
- * set warningPeriod X
- * offset 1526
- */
- int16_t warningPeriod;
- /**
- * offset 1528
- */
- adc_channel_e vRefAdcChannel;
- /**
- * offset 1532
- */
- float knockDetectionWindowStart;
- /**
- * offset 1536
- */
- float knockDetectionWindowEnd;
- /**
- * offset 1540
- */
- float idleStepperReactionTime;
- /**
- * offset 1544
- */
- float knockVThreshold;
- /**
- * offset 1548
- */
+ /**
+ * offset 400
+ */
+ specs_s specs;
+ /**
+ * Cylinder diameter, in mm.
+ * offset 412
+ */
+ float cylinderBore;
+ /**
+ * Disable sensor sniffer above this rpm
+ * offset 416
+ */
+ int sensorSnifferRpmThreshold;
+ /**
+ * offset 420
+ */
+ int rpmHardLimit;
+ /**
+ * This setting controls which fuel quantity control algorithm is used.
+ * set algorithm X
+ * offset 424
+ */
+ engine_load_mode_e fuelAlgorithm;
+ /**
+ * offset 428
+ */
+ injection_mode_e crankingInjectionMode;
+ /**
+ * 'batched' means two injectors are wired together
+ * set injection_mode X
+ * offset 432
+ */
+ injection_mode_e injectionMode;
+ /**
+ * this is about deciding when the injector starts it's squirt
+ * See also injectionPhase map
+ * todo: do we need even need this since we have the map anyway?
+ * offset 436
+ */
+ angle_t extraInjectionOffset;
+ /**
+ * Timing advance while engine cranking
+ * set cranking_timing_angle X
+ * offset 440
+ */
+ angle_t crankingTimingAngle;
+ /**
+ * 'wasted' means one coil is driving two spark plugs in two cylinders, with one of the aparks not doing anything since it's happening on the exhaust cycle
+ * set ignition_mode X
+ * offset 444
+ */
+ ignition_mode_e ignitionMode;
+ /**
+ * this value could be used to offset the whole ignition timing table by a constant
+ * offset 448
+ */
+ angle_t ignitionOffset;
+ /**
+ * offset 452
+ */
+ timing_mode_e timingMode;
+ /**
+ * This value is used in 'fixed timing' mode, i.e. constant timing
+ * This mode is useful for instance while adjusting distributor location
+ * offset 456
+ */
+ angle_t fixedModeTiming;
+ /**
+ * Angle between Top Dead Center (TDC) and the first trigger event.
+ * Knowing this angle allows us to control timing and other angles in reference to TDC.
+ * set global_trigger_offset_angle X
+ * offset 460
+ */
+ angle_t globalTriggerAngleOffset;
+ /**
+ * Coefficient of input voltage dividers on your PCB
+ * offset 464
+ */
+ float analogInputDividerCoefficient;
+ /**
+ * Battery Voltage input resistor divider coefficient
+ * offset 468
+ */
+ float vbattDividerCoeff;
+ /**
+ * offset 472
+ */
+ adc_channel_e vbattAdcChannel;
+ /**
+ * Cooling fan turn-on temperature threshold, in Celsuis
+ * offset 476
+ */
+ float fanOnTemperature;
+ /**
+ * Cooling fan turn-off temperature threshold, in Celsuis
+ * offset 480
+ */
+ float fanOffTemperature;
+ /**
+ * offset 484
+ */
+ adc_channel_e fuelLevelSensor;
+ /**
+ * This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h
+ * offset 488
+ */
+ float vehicleSpeedCoef;
+ /**
+ * set can_mode X
+ * offset 492
+ */
+ can_nbc_e canNbcType;
+ /**
+ * CANbus thread period, ms
+ * offset 496
+ */
+ int canSleepPeriod;
+ /**
+ * See engineCycle
+ * set operation_mode X
+ * offset 500
+ */
+ operation_mode_e operationMode;
+ /**
+ * offset 504
+ */
+ display_mode_e displayMode;
+ /**
+ * offset 508
+ */
+ log_format_e logFormat;
+ /**
+ * offset 512
+ */
+ int byFirmwareVersion;
+ /**
+ * offset 516
+ */
+ int HD44780width;
+ /**
+ * offset 520
+ */
+ int HD44780height;
+ /**
+ * offset 524
+ */
+ adc_channel_e tpsAdcChannel;
+ /**
+ * offset 528
+ */
+ int overrideCrankingIgnition;
+ /**
+ * offset 532
+ */
+ int sensorChartFrequency;
+ /**
+ * offset 536
+ */
+ trigger_config_s trigger;
+ /**
+ * offset 564
+ */
+ spi_device_e hip9011SpiDevice;
+ /**
+ * offset 568
+ */
+ float globalFuelCorrection;
+ /**
+ * offset 572
+ */
+ int16_t pedalPositionMin;
+ /**
+ * offset 574
+ */
+ int16_t pedalPositionMax;
+ /**
+ * maximum total number of degrees to subtract from ignition advance
+ * when knocking
+ * offset 576
+ */
+ float maxKnockSubDeg;
+ /**
+ * See hasMafSensor
+ * offset 580
+ */
+ adc_channel_e mafAdcChannel;
+ /**
+ * offset 584
+ */
+ afr_sensor_s afr;
+ /**
+ * offset 604
+ */
+ adc_channel_e pedalPositionChannel;
+ /**
+ * @see hasBaroSensor
+ * offset 608
+ */
+ air_pressure_sensor_config_s baroSensor;
+ /**
+ * offset 624
+ */
+ board_configuration_s bc;
+ /**
+ offset 1488 bit 0 */
+ bool vvtDisplayInverted : 1;
+ /**
+ offset 1488 bit 1 */
+ bool fuelClosedLoopCorrectionEnabled : 1;
+ /**
+ offset 1488 bit 2 */
+ bool unusedBit__5 : 1;
+ /**
+ offset 1488 bit 3 */
+ bool unusedBit__6 : 1;
+ /**
+ offset 1488 bit 4 */
+ bool useConstantDwellDuringCranking : 1;
+ /**
+ * This options enables data for 'engine sniffer' tab in console, which comes at some CPU price
+ offset 1488 bit 5 */
+ bool isEngineChartEnabled : 1;
+ /**
+ offset 1488 bit 6 */
+ bool unusedBit_7 : 1;
+ /**
+ offset 1488 bit 7 */
+ bool unusedBit__2 : 1;
+ /**
+ offset 1488 bit 8 */
+ bool canReadEnabled : 1;
+ /**
+ offset 1488 bit 9 */
+ bool canWriteEnabled : 1;
+ /**
+ offset 1488 bit 10 */
+ bool unusedBit_123 : 1;
+ /**
+ offset 1488 bit 11 */
+ bool unusedbit_9 : 1;
+ /**
+ offset 1488 bit 12 */
+ bool unusedbit_10 : 1;
+ /**
+ offset 1488 bit 13 */
+ bool isAlternatorControlEnabled : 1;
+ /**
+ offset 1488 bit 14 */
+ bool unusedBit__3 : 1;
+ /**
+ offset 1488 bit 15 */
+ bool unusedbit_8 : 1;
+ /**
+ offset 1488 bit 16 */
+ bool cutFuelOnHardLimit : 1;
+ /**
+ offset 1488 bit 17 */
+ bool cutSparkOnHardLimit : 1;
+ /**
+ offset 1488 bit 18 */
+ bool step1fuelCutEnable : 1;
+ /**
+ offset 1488 bit 19 */
+ bool step1SparkCutEnable : 1;
+ /**
+ offset 1488 bit 20 */
+ bool hasFrequencyReportingMapSensor : 1;
+ /**
+ * offset 1492
+ */
+ adc_channel_e hipOutputChannel;
+ /**
+ * offset 1496
+ */
+ idle_mode_e idleMode;
+ /**
+ * enable injection
+ offset 1500 bit 0 */
+ bool isInjectionEnabled : 1;
+ /**
+ * enable ignition
+ offset 1500 bit 1 */
+ bool isIgnitionEnabled : 1;
+ /**
+ * If TPS above 95% no fuel would be injected during cranking
+ * enable cylinder_cleanup
+ offset 1500 bit 2 */
+ bool isCylinderCleanupEnabled : 1;
+ /**
+ offset 1500 bit 3 */
+ bool secondTriggerChannelEnabled : 1;
+ /**
+ offset 1500 bit 4 */
+ bool needSecondTriggerInputDeprecated : 1;
+ /**
+ offset 1500 bit 5 */
+ bool isMapAveragingEnabled : 1;
+ /**
+ offset 1500 bit 6 */
+ bool anotherUnusedBit1 : 1;
+ /**
+ offset 1500 bit 7 */
+ bool anotherUnusedBit2 : 1;
+ /**
+ offset 1500 bit 8 */
+ bool isTunerStudioEnabled : 1;
+ /**
+ offset 1500 bit 9 */
+ bool isWaveAnalyzerEnabled : 1;
+ /**
+ offset 1500 bit 10 */
+ bool anotherUnusedBit212 : 1;
+ /**
+ * enable trigger_details
+ offset 1500 bit 11 */
+ bool isPrintTriggerSynchDetails : 1;
+ /**
+ * Usually if we have no trigger events that means engine is stopped
+ * Unless we are troubleshooting and spinning the engine by hand - this case a longer
+ * delay is needed
+ offset 1500 bit 12 */
+ bool isManualSpinningMode : 1;
+ /**
+ * This is needed if batched injection and individual injector wiring
+ * enable two_wire_batch_injection
+ offset 1500 bit 13 */
+ bool twoWireBatchInjection : 1;
+ /**
+ * VR sensors are only precise on rising front
+ * enable trigger_only_front
+ offset 1500 bit 14 */
+ bool useOnlyRisingEdgeForTrigger : 1;
+ /**
+ * This is needed if batched igniton (waster spark) and individual coil wiring
+ offset 1500 bit 15 */
+ bool twoWireBatchIgnition : 1;
+ /**
+ * offset 1504
+ */
+ uint32_t engineChartSize;
+ /**
+ * offset 1508
+ */
+ int targetIdleRpm;
+ /**
+ * A/C button input handled as analog input
+ * offset 1512
+ */
+ adc_channel_e acSwitchAdc;
+ /**
+ * At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback.
+ * offset 1516
+ */
+ int ignMathCalculateAtIndex;
+ /**
+ * offset 1520
+ */
+ int16_t acCutoffLowRpm;
+ /**
+ * offset 1522
+ */
+ int16_t acCutoffHighRpm;
+ /**
+ * offset 1524
+ */
+ int16_t acIdleRpmBump;
+ /**
+ * set warningPeriod X
+ * offset 1526
+ */
+ int16_t warningPeriod;
+ /**
+ * offset 1528
+ */
+ adc_channel_e vRefAdcChannel;
+ /**
+ * offset 1532
+ */
+ float knockDetectionWindowStart;
+ /**
+ * offset 1536
+ */
+ float knockDetectionWindowEnd;
+ /**
+ * offset 1540
+ */
+ float idleStepperReactionTime;
+ /**
+ * offset 1544
+ */
+ float knockVThreshold;
+ /**
+ * offset 1548
+ */
pin_input_mode_e fsioInputModes[LE_COMMAND_COUNT];
- /**
- * offset 1612
- */
- adc_channel_e externalKnockSenseAdc;
- /**
- * offset 1616
- */
+ /**
+ * offset 1612
+ */
+ adc_channel_e externalKnockSenseAdc;
+ /**
+ * offset 1616
+ */
int unsed2342342[3];
- /**
- * offset 1628
- */
- int idleStepperTotalSteps;
- /**
- * offset 1632
- */
- brain_pin_e stepperEnablePin;
- /**
- * offset 1636
- */
- float noAccelAfterHardLimitPeriodSecs;
- /**
- * At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback.
- * offset 1640
- */
- int mapAveragingSchedulingAtIndex;
- /**
- * offset 1644
- */
+ /**
+ * offset 1628
+ */
+ int idleStepperTotalSteps;
+ /**
+ * offset 1632
+ */
+ brain_pin_e stepperEnablePin;
+ /**
+ * offset 1636
+ */
+ float noAccelAfterHardLimitPeriodSecs;
+ /**
+ * At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback.
+ * offset 1640
+ */
+ int mapAveragingSchedulingAtIndex;
+ /**
+ * offset 1644
+ */
float baroCorrPressureBins[BARO_CORR_SIZE];
- /**
- * offset 1660
- */
+ /**
+ * offset 1660
+ */
float baroCorrRpmBins[BARO_CORR_SIZE];
- /**
- * offset 1676
- */
- baro_corr_table_t baroCorrTable;
- /**
- * offset 1740
- */
- pin_mode_e spi2SckMode;
- /**
- * offset 1744
- */
- pin_mode_e spi2MosiMode;
- /**
- * offset 1748
- */
- pin_mode_e spi2MisoMode;
- /**
- * Cranking fuel correction coefficient based on TPS
- * offset 1752
- */
+ /**
+ * offset 1676
+ */
+ baro_corr_table_t baroCorrTable;
+ /**
+ * offset 1740
+ */
+ pin_mode_e spi2SckMode;
+ /**
+ * offset 1744
+ */
+ pin_mode_e spi2MosiMode;
+ /**
+ * offset 1748
+ */
+ pin_mode_e spi2MisoMode;
+ /**
+ * Cranking fuel correction coefficient based on TPS
+ * offset 1752
+ */
float crankingTpsCoef[CRANKING_CURVE_SIZE];
- /**
- * offset 1784
- */
+ /**
+ * offset 1784
+ */
float crankingTpsBins[CRANKING_CURVE_SIZE];
- /**
- * offset 1816
- */
- float tachPulseDuractionMs;
- /**
- * Trigger cycle index at which we start tach pulse (performance consideration)
- * offset 1820
- */
- int tachPulseTriggerIndex;
- /**
- * offset 1824
- */
- float suckedOffCoef;
- /**
- * TODO make suckedOffCoef an array by RPM
- * offset 1828
- */
+ /**
+ * offset 1816
+ */
+ float tachPulseDuractionMs;
+ /**
+ * Trigger cycle index at which we start tach pulse (performance consideration)
+ * offset 1820
+ */
+ int tachPulseTriggerIndex;
+ /**
+ * offset 1824
+ */
+ float suckedOffCoef;
+ /**
+ * TODO make suckedOffCoef an array by RPM
+ * offset 1828
+ */
float unused71[7];
- /**
- * offset 1856
- */
- float addedToWallCoef;
- /**
- * TODO make addedToWallCoef an array by RPM
- * offset 1860
- */
+ /**
+ * offset 1856
+ */
+ float addedToWallCoef;
+ /**
+ * TODO make addedToWallCoef an array by RPM
+ * offset 1860
+ */
float unused72[7];
- /**
- * kPa value which is too low to be true
- * offset 1888
- */
- float mapErrorDetectionTooLow;
- /**
- * kPa value which is too high to be true
- * offset 1892
- */
- float mapErrorDetectionTooHigh;
- /**
- * RPMs prior to step1rpm point where ignition advance is retarded
- * offset 1896
- */
- int step1RpmWindow;
- /**
- * offset 1900
- */
- pid_s idleRpmPid;
- /**
- * offset 1916
- */
- int idleDT;
- /**
- * offset 1920
- */
- idle_control_e idleControl;
- /**
- * blue LED on discovery by default
- * offset 1924
- */
- brain_pin_e communicationPin;
- /**
- * green LED on discovery by default
- * offset 1928
- */
- brain_pin_e runningPin;
- /**
- * offset 1932
- */
- brain_pin_e binarySerialTxPin;
- /**
- * offset 1936
- */
- brain_pin_e binarySerialRxPin;
- /**
- * todo: finish pin migration from hard-coded to configurable?
- * offset 1940
- */
- brain_pin_e consoleSerialTxPin;
- /**
- * todo: finish pin migration from hard-coded to configurable?
- * offset 1944
- */
- brain_pin_e consoleSerialRxPin;
- /**
- * Knock sensor output knock detection threshold depending on current RPM
- * offset 1948
- */
+ /**
+ * kPa value which is too low to be true
+ * offset 1888
+ */
+ float mapErrorDetectionTooLow;
+ /**
+ * kPa value which is too high to be true
+ * offset 1892
+ */
+ float mapErrorDetectionTooHigh;
+ /**
+ * RPMs prior to step1rpm point where ignition advance is retarded
+ * offset 1896
+ */
+ int step1RpmWindow;
+ /**
+ * offset 1900
+ */
+ pid_s idleRpmPid;
+ /**
+ * offset 1916
+ */
+ int idleDT;
+ /**
+ * offset 1920
+ */
+ idle_control_e idleControl;
+ /**
+ * blue LED on discovery by default
+ * offset 1924
+ */
+ brain_pin_e communicationPin;
+ /**
+ * green LED on discovery by default
+ * offset 1928
+ */
+ brain_pin_e runningPin;
+ /**
+ * offset 1932
+ */
+ brain_pin_e binarySerialTxPin;
+ /**
+ * offset 1936
+ */
+ brain_pin_e binarySerialRxPin;
+ /**
+ * todo: finish pin migration from hard-coded to configurable?
+ * offset 1940
+ */
+ brain_pin_e consoleSerialTxPin;
+ /**
+ * todo: finish pin migration from hard-coded to configurable?
+ * offset 1944
+ */
+ brain_pin_e consoleSerialRxPin;
+ /**
+ * Knock sensor output knock detection threshold depending on current RPM
+ * offset 1948
+ */
float knockNoise[ENGINE_NOISE_CURVE_SIZE];
- /**
- * offset 1980
- */
+ /**
+ * offset 1980
+ */
float knockNoiseRpmBins[ENGINE_NOISE_CURVE_SIZE];
- /**
- * offset 2012
- */
- pid_s etb;
- /**
- * CLT-based target RPM for automatic idle controller
- * offset 2028
- */
+ /**
+ * offset 2012
+ */
+ pid_s etb;
+ /**
+ * CLT-based target RPM for automatic idle controller
+ * offset 2028
+ */
float cltIdleRpmBins[CLT_CURVE_SIZE];
- /**
- * offset 2092
- */
+ /**
+ * offset 2092
+ */
float cltIdleRpm[CLT_CURVE_SIZE];
- /**
- * offset 2156
- */
- float targetVBatt;
- /**
- * Turn off alternator output above specified TPS
- * offset 2160
- */
- float alternatorOffAboveTps;
- /**
- * PID dTime
- * offset 2164
- */
- int alternatorDT;
- /**
- * offset 2168
- */
- pid_s alternatorControl;
- /**
- * offset 2184
- */
- int tpsAccelLength;
- /**
- * offset 2188
- */
- float tpsAccelEnrichmentThreshold;
- /**
- * set vvt_offset X
- * offset 2192
- */
- float vvtOffset;
- /**
- * offset 2196
- */
- int engineLoadAccelLength;
- /**
- * offset 2200
- */
- float engineLoadDecelEnleanmentThreshold;
- /**
- * offset 2204
- */
- float engineLoadDecelEnleanmentMultiplier;
- /**
- * offset 2208
- */
- float engineLoadAccelEnrichmentThreshold;
- /**
- * offset 2212
- */
- float engineLoadAccelEnrichmentMultiplier;
- /**
- * RED led on Discovery by default. TODO: start using this property
- * offset 2216
- */
- brain_pin_e fatalErrorPin;
- /**
- * TODO: start using this property
- * offset 2220
- */
- brain_pin_e warninigPin;
- /**
- * offset 2224
- */
- brain_pin_e configResetPin;
- /**
- * offset 2228
- */
- uint32_t uartConsoleSerialSpeed;
- /**
- * offset 2232
- */
- float tpsDecelEnleanmentThreshold;
- /**
- * offset 2236
- */
- float tpsDecelEnleanmentMultiplier;
- /**
- * ExpAverage alpha coefficient
- * offset 2240
- */
- float slowAdcAlpha;
- /**
- * offset 2244
- */
- debug_mode_e debugMode;
- /**
- * offset 2248
- */
- pid_s warmupAfrPid;
- /**
- * CLT-based target AFR for PID-based control
- * offset 2264
- */
+ /**
+ * offset 2156
+ */
+ float targetVBatt;
+ /**
+ * Turn off alternator output above specified TPS
+ * offset 2160
+ */
+ float alternatorOffAboveTps;
+ /**
+ * PID dTime
+ * offset 2164
+ */
+ int alternatorDT;
+ /**
+ * offset 2168
+ */
+ pid_s alternatorControl;
+ /**
+ * offset 2184
+ */
+ int tpsAccelLength;
+ /**
+ * offset 2188
+ */
+ float tpsAccelEnrichmentThreshold;
+ /**
+ * set vvt_offset X
+ * offset 2192
+ */
+ float vvtOffset;
+ /**
+ * offset 2196
+ */
+ int engineLoadAccelLength;
+ /**
+ * offset 2200
+ */
+ float engineLoadDecelEnleanmentThreshold;
+ /**
+ * offset 2204
+ */
+ float engineLoadDecelEnleanmentMultiplier;
+ /**
+ * offset 2208
+ */
+ float engineLoadAccelEnrichmentThreshold;
+ /**
+ * offset 2212
+ */
+ float engineLoadAccelEnrichmentMultiplier;
+ /**
+ * RED led on Discovery by default. TODO: start using this property
+ * offset 2216
+ */
+ brain_pin_e fatalErrorPin;
+ /**
+ * TODO: start using this property
+ * offset 2220
+ */
+ brain_pin_e warninigPin;
+ /**
+ * offset 2224
+ */
+ brain_pin_e configResetPin;
+ /**
+ * offset 2228
+ */
+ uint32_t uartConsoleSerialSpeed;
+ /**
+ * offset 2232
+ */
+ float tpsDecelEnleanmentThreshold;
+ /**
+ * offset 2236
+ */
+ float tpsDecelEnleanmentMultiplier;
+ /**
+ * ExpAverage alpha coefficient
+ * offset 2240
+ */
+ float slowAdcAlpha;
+ /**
+ * offset 2244
+ */
+ debug_mode_e debugMode;
+ /**
+ * offset 2248
+ */
+ pid_s warmupAfrPid;
+ /**
+ * CLT-based target AFR for PID-based control
+ * offset 2264
+ */
float warmupTargetAfrBins[WARMUP_TARGET_AFR_SIZE];
- /**
- * offset 2280
- */
+ /**
+ * offset 2280
+ */
float warmupTargetAfr[WARMUP_TARGET_AFR_SIZE];
- /**
- * offset 2296
- */
- float warmupAfrThreshold;
- /**
- * kPa value at which we need to cut fuel and spark, 0 if not enabled
- * offset 2300
- */
- float boostCutPressure;
- /**
- * offset 2304
- */
+ /**
+ * offset 2296
+ */
+ float warmupAfrThreshold;
+ /**
+ * kPa value at which we need to cut fuel and spark, 0 if not enabled
+ * offset 2300
+ */
+ float boostCutPressure;
+ /**
+ * offset 2304
+ */
float mapAccelTaperBins[MAP_ACCEL_TAPER];
- /**
- * offset 2336
- */
+ /**
+ * offset 2336
+ */
float mapAccelTaperMult[MAP_ACCEL_TAPER];
- /**
- * This implementation makes a pulse every time one of the coils is charged. See also tachOutputPin
- * offset 2368
- */
- brain_pin_e dizzySparkOutputPin;
- /**
- * offset 2372
- */
- pin_output_mode_e dizzySparkOutputPinMode;
- /**
- * offset 2376
- */
+ /**
+ * This implementation makes a pulse every time one of the coils is charged. See also tachOutputPin
+ * offset 2368
+ */
+ brain_pin_e dizzySparkOutputPin;
+ /**
+ * offset 2372
+ */
+ pin_output_mode_e dizzySparkOutputPinMode;
+ /**
+ * offset 2376
+ */
adc_channel_e fsioAdc[FSIO_ADC_COUNT];
- /**
- * Fixed timing, useful for TDC testing
- * offset 2392
- */
- float fixedTiming;
- /**
- * MAP voltage for low point
- * offset 2396
- */
- float mapLowValueVoltage;
- /**
- * MAP voltage for low point
- * offset 2400
- */
- float mapHighValueVoltage;
- /**
- * EGO value correction
- * offset 2404
- */
- float egoValueShift;
- /**
- * offset 2408
- */
- brain_input_pin_e camInput;
- /**
- * offset 2412
- */
+ /**
+ * Fixed timing, useful for TDC testing
+ * offset 2392
+ */
+ float fixedTiming;
+ /**
+ * MAP voltage for low point
+ * offset 2396
+ */
+ float mapLowValueVoltage;
+ /**
+ * MAP voltage for low point
+ * offset 2400
+ */
+ float mapHighValueVoltage;
+ /**
+ * EGO value correction
+ * offset 2404
+ */
+ float egoValueShift;
+ /**
+ * offset 2408
+ */
+ brain_input_pin_e camInput;
+ /**
+ * offset 2412
+ */
pid_dt auxPidDT[AUX_PID_COUNT];
- /**
- * Extra idle while cranking
- * offset 2428
- */
- float crankingIdleAdjustment;
- /**
- * offset 2432
- */
- float tChargeMinRpmMinTps;
- /**
- * offset 2436
- */
- float tChargeMinRpmMaxTps;
- /**
- * offset 2440
- */
- float tChargeMaxRpmMinTps;
- /**
- * offset 2444
- */
- float tChargeMaxRpmMaxTps;
- /**
- * offset 2448
- */
+ /**
+ * Extra idle while cranking
+ * offset 2428
+ */
+ float crankingIdleAdjustment;
+ /**
+ * offset 2432
+ */
+ float tChargeMinRpmMinTps;
+ /**
+ * offset 2436
+ */
+ float tChargeMinRpmMaxTps;
+ /**
+ * offset 2440
+ */
+ float tChargeMaxRpmMinTps;
+ /**
+ * offset 2444
+ */
+ float tChargeMaxRpmMaxTps;
+ /**
+ * offset 2448
+ */
brain_pin_e auxPidPins[AUX_PID_COUNT];
- /**
- * offset 2464
- */
+ /**
+ * offset 2464
+ */
fsio_pwm_freq_t auxPidFrequency[AUX_PID_COUNT];
- /**
- * offset 2472
- */
- int alternatorPwmFrequency;
- /**
- * offset 2476
- */
- mass_storage_e storageMode;
- /**
- * offset 2480
- */
- spi_device_e cj125SpiDevice;
- /**
- * offset 2484
- */
- pin_output_mode_e cj125CsPinMode;
- /**
- * offset 2488
- */
+ /**
+ * offset 2472
+ */
+ int alternatorPwmFrequency;
+ /**
+ * offset 2476
+ */
+ mass_storage_e storageMode;
+ /**
+ * offset 2480
+ */
+ spi_device_e cj125SpiDevice;
+ /**
+ * offset 2484
+ */
+ pin_output_mode_e cj125CsPinMode;
+ /**
+ * offset 2488
+ */
pid_s auxPid[AUX_PID_COUNT];
- /**
- * set vvt_mode X
- * offset 2552
- */
- vvt_mode_e vvtMode;
- /**
- * offset 2556
- */
- bi_quard_s biQuad;
- /**
- * CLT-based timing correction
- * offset 2576
- */
+ /**
+ * set vvt_mode X
+ * offset 2552
+ */
+ vvt_mode_e vvtMode;
+ /**
+ * offset 2556
+ */
+ bi_quard_s biQuad;
+ /**
+ * CLT-based timing correction
+ * offset 2576
+ */
float cltTimingBins[CLT_TIMING_CURVE_SIZE];
- /**
- * offset 2608
- */
+ /**
+ * offset 2608
+ */
float cltTimingExtra[CLT_TIMING_CURVE_SIZE];
- /**
- * offset 2640
- */
- int nbVvtIndex;
- /**
- * offset 2644
- */
- float autoTuneCltThreshold;
- /**
- * offset 2648
- */
- float autoTuneTpsRocThreshold;
- /**
- * offset 2652
- */
- float autoTuneTpsQuietPeriod;
- /**
- * offset 2656
- */
- float postCrankingTargetClt;
- /**
- * offset 2660
- */
- float postCrankingFactor;
- /**
- * offset 2664
- */
- float postCrankingDurationSec;
- /**
- * offset 2668
- */
- ThermistorConf auxTempSensor1;
- /**
- * offset 2700
- */
- ThermistorConf auxTempSensor2;
- /**
- * offset 2732
- */
- int16_t fuelClosedLoopCltThreshold;
- /**
- * offset 2734
- */
- int16_t fuelClosedLoopTpsThreshold;
- /**
- * offset 2736
- */
- int16_t fuelClosedLoopRpmThreshold;
- /**
- * offset 2738
- */
- int16_t etbFreq;
- /**
- * offset 2740
- */
- pid_s fuelClosedLoopPid;
- /**
- * offset 2756
- */
- float fuelClosedLoopAfrLowThreshold;
- /**
- * offset 2760
- */
- float fuelClosedLoopAfrHighThreshold;
- /**
- * offset 2764
- */
- pin_mode_e stepperEnablePinMode;
- /**
- * lampda input
- * offset 2768
- */
- adc_channel_e cj125ua;
- /**
- * heater input
- * offset 2772
- */
- adc_channel_e cj125ur;
- /**
- * offset 2776
- */
+ /**
+ * offset 2640
+ */
+ int nbVvtIndex;
+ /**
+ * offset 2644
+ */
+ float autoTuneCltThreshold;
+ /**
+ * offset 2648
+ */
+ float autoTuneTpsRocThreshold;
+ /**
+ * offset 2652
+ */
+ float autoTuneTpsQuietPeriod;
+ /**
+ * offset 2656
+ */
+ float postCrankingTargetClt;
+ /**
+ * offset 2660
+ */
+ float postCrankingFactor;
+ /**
+ * offset 2664
+ */
+ float postCrankingDurationSec;
+ /**
+ * offset 2668
+ */
+ ThermistorConf auxTempSensor1;
+ /**
+ * offset 2700
+ */
+ ThermistorConf auxTempSensor2;
+ /**
+ * offset 2732
+ */
+ int16_t fuelClosedLoopCltThreshold;
+ /**
+ * offset 2734
+ */
+ int16_t fuelClosedLoopTpsThreshold;
+ /**
+ * offset 2736
+ */
+ int16_t fuelClosedLoopRpmThreshold;
+ /**
+ * offset 2738
+ */
+ int16_t etbFreq;
+ /**
+ * offset 2740
+ */
+ pid_s fuelClosedLoopPid;
+ /**
+ * offset 2756
+ */
+ float fuelClosedLoopAfrLowThreshold;
+ /**
+ * offset 2760
+ */
+ float fuelClosedLoopAfrHighThreshold;
+ /**
+ * offset 2764
+ */
+ pin_mode_e stepperEnablePinMode;
+ /**
+ * lampda input
+ * offset 2768
+ */
+ adc_channel_e cj125ua;
+ /**
+ * heater input
+ * offset 2772
+ */
+ adc_channel_e cj125ur;
+ /**
+ * offset 2776
+ */
cfg_float_t_1f timing_offset_cylinder[IGNITION_PIN_COUNT];
- /**
- * offset 2824
- */
+ /**
+ * offset 2824
+ */
int unused[56];
- /** total size 3048*/
-} engine_configuration_s;
-
-typedef struct {
- /**
- * offset 0
- */
- engine_configuration_s engineConfiguration;
- /**
- * offset 3048
- */
+ /** total size 3048*/
+} engine_configuration_s;
+
+typedef struct {
+ /**
+ * offset 0
+ */
+ engine_configuration_s engineConfiguration;
+ /**
+ * offset 3048
+ */
le_formula_t le_formulas[LE_COMMAND_COUNT];
- /**
- * offset 6248
- */
- le_formula_t timingMultiplier;
- /**
- * offset 6448
- */
- le_formula_t timingAdditive;
- /**
- * offset 6648
- */
+ /**
+ * offset 6248
+ */
+ le_formula_t timingMultiplier;
+ /**
+ * offset 6448
+ */
+ le_formula_t timingAdditive;
+ /**
+ * offset 6648
+ */
float cltFuelCorrBins[CLT_CURVE_SIZE];
- /**
- * offset 6712
- */
+ /**
+ * offset 6712
+ */
float cltFuelCorr[CLT_CURVE_SIZE];
- /**
- * offset 6776
- */
+ /**
+ * offset 6776
+ */
float iatFuelCorrBins[IAT_CURVE_SIZE];
- /**
- * offset 6840
- */
+ /**
+ * offset 6840
+ */
float iatFuelCorr[IAT_CURVE_SIZE];
- /**
- * offset 6904
- */
+ /**
+ * offset 6904
+ */
float crankingFuelCoef[CRANKING_CURVE_SIZE];
- /**
- * offset 6936
- */
+ /**
+ * offset 6936
+ */
float crankingFuelBins[CRANKING_CURVE_SIZE];
- /**
- * offset 6968
- */
+ /**
+ * offset 6968
+ */
float crankingCycleCoef[CRANKING_CURVE_SIZE];
- /**
- * offset 7000
- */
+ /**
+ * offset 7000
+ */
float crankingCycleBins[CRANKING_CURVE_SIZE];
- /**
- * CLT-based idle position multiplier for simple manual idle controller
- * offset 7032
- */
+ /**
+ * CLT-based idle position multiplier for simple manual idle controller
+ * offset 7032
+ */
float cltIdleCorrBins[CLT_CURVE_SIZE];
- /**
- * offset 7096
- */
+ /**
+ * offset 7096
+ */
float cltIdleCorr[CLT_CURVE_SIZE];
- /**
- * kg/hour value.
- * By the way 2.081989116 kg/h = 1 ft³/m
- * offset 7160
- */
+ /**
+ * kg/hour value.
+ * By the way 2.081989116 kg/h = 1 ft³/m
+ * offset 7160
+ */
float mafDecoding[MAF_DECODING_COUNT];
- /**
- * offset 8184
- */
+ /**
+ * offset 8184
+ */
float mafDecodingBins[MAF_DECODING_COUNT];
- /**
- * offset 9208
- */
- angle_table_t ignitionIatCorrTable;
- /**
- * offset 10232
- */
+ /**
+ * offset 9208
+ */
+ angle_table_t ignitionIatCorrTable;
+ /**
+ * offset 10232
+ */
float ignitionIatCorrLoadBins[IGN_LOAD_COUNT];
- /**
- * offset 10296
- */
+ /**
+ * offset 10296
+ */
float ignitionIatCorrRpmBins[IGN_RPM_COUNT];
- /**
- * offset 10360
- */
- angle_table_t injectionPhase;
- /**
- * offset 11384
- */
+ /**
+ * offset 10360
+ */
+ angle_table_t injectionPhase;
+ /**
+ * offset 11384
+ */
float injPhaseLoadBins[FUEL_LOAD_COUNT];
- /**
- * offset 11448
- */
+ /**
+ * offset 11448
+ */
float injPhaseRpmBins[FUEL_RPM_COUNT];
- /**
- * offset 11512
- */
- fuel_table_t fuelTable;
- /**
- * offset 12536
- */
+ /**
+ * offset 11512
+ */
+ fuel_table_t fuelTable;
+ /**
+ * offset 12536
+ */
float fuelLoadBins[FUEL_LOAD_COUNT];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 12600
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 12600
+ */
float fuelRpmBins[FUEL_RPM_COUNT];
- /**
- * offset 12664
- */
- ignition_table_t ignitionTable;
- /**
- * offset 13688
- */
+ /**
+ * offset 12664
+ */
+ ignition_table_t ignitionTable;
+ /**
+ * offset 13688
+ */
float ignitionLoadBins[IGN_LOAD_COUNT];
- /**
- * offset 13752
- */
+ /**
+ * offset 13752
+ */
float ignitionRpmBins[IGN_RPM_COUNT];
- /**
- * offset 13816
- */
- ve_table_t veTable;
- /**
- * offset 14840
- */
+ /**
+ * offset 13816
+ */
+ ve_table_t veTable;
+ /**
+ * offset 14840
+ */
float veLoadBins[FUEL_LOAD_COUNT];
- /**
- * offset 14904
- */
+ /**
+ * offset 14904
+ */
float veRpmBins[FUEL_RPM_COUNT];
- /**
- * offset 14968
- */
- afr_table_t afrTable;
- /**
- * offset 15224
- */
+ /**
+ * offset 14968
+ */
+ afr_table_t afrTable;
+ /**
+ * offset 15224
+ */
float afrLoadBins[FUEL_LOAD_COUNT];
- /**
- * offset 15288
- */
+ /**
+ * offset 15288
+ */
float afrRpmBins[FUEL_RPM_COUNT];
- /**
- * offset 15352
- */
- tps_tps_table_t tpsTpsAccelTable;
- /**
- * offset 15608
- */
+ /**
+ * offset 15352
+ */
+ tps_tps_table_t tpsTpsAccelTable;
+ /**
+ * offset 15608
+ */
float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 15640
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 15640
+ */
float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE];
- /**
- * offset 15672
- */
- fsio_table_8x8_f32t fsioTable1;
- /**
- * offset 15928
- */
+ /**
+ * offset 15672
+ */
+ fsio_table_8x8_f32t fsioTable1;
+ /**
+ * offset 15928
+ */
float fsioTable1LoadBins[FSIO_TABLE_8];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 15960
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 15960
+ */
float fsioTable1RpmBins[FSIO_TABLE_8];
- /**
- * offset 15992
- */
- fsio_table_8x8_u8t fsioTable2;
- /**
- * offset 16056
- */
+ /**
+ * offset 15992
+ */
+ fsio_table_8x8_u8t fsioTable2;
+ /**
+ * offset 16056
+ */
float fsioTable2LoadBins[FSIO_TABLE_8];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 16088
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 16088
+ */
float fsioTable2RpmBins[FSIO_TABLE_8];
- /**
- * offset 16120
- */
- fsio_table_8x8_u8t fsioTable3;
- /**
- * offset 16184
- */
+ /**
+ * offset 16120
+ */
+ fsio_table_8x8_u8t fsioTable3;
+ /**
+ * offset 16184
+ */
float fsioTable3LoadBins[FSIO_TABLE_8];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 16216
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 16216
+ */
float fsioTable3RpmBins[FSIO_TABLE_8];
- /**
- * offset 16248
- */
- fsio_table_8x8_u8t fsioTable4;
- /**
- * offset 16312
- */
+ /**
+ * offset 16248
+ */
+ fsio_table_8x8_u8t fsioTable4;
+ /**
+ * offset 16312
+ */
float fsioTable4LoadBins[FSIO_TABLE_8];
- /**
- * RPM is float and not integer in order to use unified methods for interpolation
- * offset 16344
- */
+ /**
+ * RPM is float and not integer in order to use unified methods for interpolation
+ * offset 16344
+ */
float fsioTable4RpmBins[FSIO_TABLE_8];
- /** total size 16376*/
-} persistent_config_s;
-
-#endif
-// end
-// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Mar 17 16:41:29 EDT 2017
+ /** total size 16376*/
+} persistent_config_s;
+
+#endif
+// end
+// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Mar 17 16:41:29 EDT 2017
diff --git a/firmware/controllers/algo/rusefi_generated.h b/firmware/controllers/algo/rusefi_generated.h
index 14e41beca6..66300d86ca 100644
--- a/firmware/controllers/algo/rusefi_generated.h
+++ b/firmware/controllers/algo/rusefi_generated.h
@@ -1,1024 +1,1024 @@
-#define LE_COMMAND_LENGTH 200
-#define FSIO_ADC_COUNT 4
-#define TS_OUTPUT_SIZE 356
-#define TS_FILE_VERSION 20161225
-#define WARMUP_TARGET_AFR_SIZE 4
-#define MAP_ANGLE_SIZE 8
-#define MAP_WINDOW_SIZE 8
-#define CLT_CURVE_SIZE 16
-#define ENGINE_NOISE_CURVE_SIZE 8
-#define CLT_TIMING_CURVE_SIZE 8
-#define IAT_CURVE_SIZE 16
-#define VBAT_INJECTOR_CURVE_SIZE 8
-#define DWELL_CURVE_SIZE 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 EGT_CHANNEL_COUNT 8
-#define DIGIPOT_COUNT 4
-#define HW_MAX_ADC_INDEX 17
-#define TRIGGER_SIMULATOR_PIN_COUNT 3
-#define LOGIC_ANALYZER_CHANNEL_COUNT 4
-#define LE_COMMAND_COUNT 16
-#define AUX_PID_COUNT 4
-#define FUEL_RPM_COUNT 16
-#define FUEL_LOAD_COUNT 16
-#define FSIO_TABLE_8 8
-#define TPS_TPS_ACCEL_TABLE 8
-#define MAP_ACCEL_TAPER 8
-#define BARO_CORR_SIZE 4
-#define MAF_DECODING_COUNT 256
-#define engineConfiguration_offset 0
-#define engineConfiguration_offset_hex 0
-#define engineType_offset 0
-#define engineType_offset_hex 0
-#define engineSnifferRpmThreshold_offset 4
-#define engineSnifferRpmThreshold_offset_hex 4
-#define injector_offset 8
-#define injector_offset_hex 8
-#define injector_flow_offset 8
-#define injector_flow_offset_hex 8
-#define injector_unusedlag_offset 12
-#define injector_battLagCorrBins_offset 16
-#define injector_battLagCorrBins_offset_hex 10
-#define injector_battLagCorr_offset 48
-#define injector_battLagCorr_offset_hex 30
-#define directSelfStimulation_offset 80
-#define directSelfStimulation_offset_hex 50
-#define activateAuxPid1_offset 80
-#define activateAuxPid1_offset_hex 50
-#define isVerboseAuxPid1_offset 80
-#define isVerboseAuxPid1_offset_hex 50
-#define activateAuxPid2_offset 80
-#define activateAuxPid2_offset_hex 50
-#define isVerboseAuxPid2_offset 80
-#define isVerboseAuxPid2_offset_hex 50
-#define activateAuxPid3_offset 80
-#define activateAuxPid3_offset_hex 50
-#define isVerboseAuxPid3_offset 80
-#define isVerboseAuxPid3_offset_hex 50
-#define activateAuxPid4_offset 80
-#define activateAuxPid4_offset_hex 50
-#define isVerboseAuxPid4_offset 80
-#define isVerboseAuxPid4_offset_hex 50
-#define useBiQuadAnalogFiltering_offset 80
-#define useBiQuadAnalogFiltering_offset_hex 50
-#define issue_294_10_offset 80
-#define issue_294_10_offset_hex 50
-#define issue_294_11_offset 80
-#define issue_294_11_offset_hex 50
-#define issue_294_12_offset 80
-#define issue_294_12_offset_hex 50
-#define issue_294_13_offset 80
-#define issue_294_13_offset_hex 50
-#define issue_294_14_offset 80
-#define issue_294_14_offset_hex 50
-#define issue_294_15_offset 80
-#define issue_294_15_offset_hex 50
-#define issue_294_16_offset 80
-#define issue_294_16_offset_hex 50
-#define issue_294_17_offset 80
-#define issue_294_17_offset_hex 50
-#define issue_294_18_offset 80
-#define issue_294_18_offset_hex 50
-#define issue_294_19_offset 80
-#define issue_294_19_offset_hex 50
-#define issue_294_21_offset 80
-#define issue_294_21_offset_hex 50
-#define issue_294_22_offset 80
-#define issue_294_22_offset_hex 50
-#define issue_294_23_offset 80
-#define issue_294_23_offset_hex 50
-#define issue_294_24_offset 80
-#define issue_294_24_offset_hex 50
-#define issue_294_25_offset 80
-#define issue_294_25_offset_hex 50
-#define issue_294_26_offset 80
-#define issue_294_26_offset_hex 50
-#define issue_294_27_offset 80
-#define issue_294_27_offset_hex 50
-#define issue_294_28_offset 80
-#define issue_294_28_offset_hex 50
-#define issue_294_29_offset 80
-#define issue_294_29_offset_hex 50
-#define tpsMin_offset 84
-#define tpsMin_offset_hex 54
-#define tpsMax_offset 86
-#define tpsMax_offset_hex 56
-#define tpsErrorDetectionTooLow_offset 88
-#define tpsErrorDetectionTooLow_offset_hex 58
-#define tpsErrorDetectionTooHigh_offset 90
-#define cranking_offset 92
-#define cranking_baseFuel_offset 92
-#define cranking_rpm_offset 96
-#define cranking_rpm_offset_hex 60
-#define cranking_alignmentFill_offset 98
-#define cranking_alignmentFill_offset_hex 62
-#define primingSquirtDurationMs_offset 100
-#define primingSquirtDurationMs_offset_hex 64
-#define ignitionDwellForCrankingMs_offset 104
-#define ignitionDwellForCrankingMs_offset_hex 68
-#define crankingChargeAngle_offset 108
-#define map_offset 112
-#define map_offset_hex 70
-#define map_samplingAngleBins_offset 112
-#define map_samplingAngleBins_offset_hex 70
-#define map_samplingAngle_offset 144
-#define map_samplingAngle_offset_hex 90
-#define map_samplingWindowBins_offset 176
-#define map_samplingWindow_offset 208
-#define map_sensor_offset 240
-#define map_sensor_lowValue_offset 240
-#define map_sensor_highValue_offset 244
-#define map_sensor_type_offset 248
-#define map_sensor_hwChannel_offset 252
-#define clt_offset 256
-#define clt_offset_hex 100
-#define clt_config_offset 256
-#define clt_config_offset_hex 100
-#define clt_tempC_1_offset 256
-#define clt_tempC_1_offset_hex 100
-#define clt_tempC_2_offset 260
-#define clt_tempC_2_offset_hex 104
-#define clt_tempC_3_offset 264
-#define clt_tempC_3_offset_hex 108
-#define clt_resistance_1_offset 268
-#define clt_resistance_2_offset 272
-#define clt_resistance_2_offset_hex 110
-#define clt_resistance_3_offset 276
-#define clt_resistance_3_offset_hex 114
-#define clt_bias_resistor_offset 280
-#define clt_bias_resistor_offset_hex 118
-#define clt_adcChannel_offset 284
-#define iat_offset 288
-#define iat_offset_hex 120
-#define iat_config_offset 288
-#define iat_config_offset_hex 120
-#define iat_tempC_1_offset 288
-#define iat_tempC_1_offset_hex 120
-#define iat_tempC_2_offset 292
-#define iat_tempC_2_offset_hex 124
-#define iat_tempC_3_offset 296
-#define iat_tempC_3_offset_hex 128
-#define iat_resistance_1_offset 300
-#define iat_resistance_2_offset 304
-#define iat_resistance_2_offset_hex 130
-#define iat_resistance_3_offset 308
-#define iat_resistance_3_offset_hex 134
-#define iat_bias_resistor_offset 312
-#define iat_bias_resistor_offset_hex 138
-#define iat_adcChannel_offset 316
-#define step1rpm_offset 320
-#define step1rpm_offset_hex 140
-#define step1timing_offset 324
-#define step1timing_offset_hex 144
-#define hip9011PrescalerAndSDO_offset 328
-#define hip9011PrescalerAndSDO_offset_hex 148
-#define knockBandCustom_offset 332
-#define sparkDwellRpmBins_offset 336
-#define sparkDwellRpmBins_offset_hex 150
-#define sparkDwellValues_offset 368
-#define sparkDwellValues_offset_hex 170
-#define specs_offset 400
-#define specs_offset_hex 190
-#define displacement_offset 400
-#define displacement_offset_hex 190
-#define cylindersCount_offset 404
-#define cylindersCount_offset_hex 194
-#define firingOrder_offset 408
-#define firingOrder_offset_hex 198
-#define cylinderBore_offset 412
-#define sensorSnifferRpmThreshold_offset 416
-#define rpmHardLimit_offset 420
-#define fuelAlgorithm_offset 424
-#define crankingInjectionMode_offset 428
-#define injectionMode_offset 432
-#define extraInjectionOffset_offset 436
-#define crankingTimingAngle_offset 440
-#define ignitionMode_offset 444
-#define ignitionOffset_offset 448
-#define timingMode_offset 452
-#define fixedModeTiming_offset 456
-#define globalTriggerAngleOffset_offset 460
-#define analogInputDividerCoefficient_offset 464
-#define vbattDividerCoeff_offset 468
-#define vbattAdcChannel_offset 472
-#define fanOnTemperature_offset 476
-#define fanOffTemperature_offset 480
-#define fuelLevelSensor_offset 484
-#define vehicleSpeedCoef_offset 488
-#define canNbcType_offset 492
-#define canSleepPeriod_offset 496
-#define operationMode_offset 500
-#define displayMode_offset 504
-#define logFormat_offset 508
-#define byFirmwareVersion_offset 512
-#define byFirmwareVersion_offset_hex 200
-#define HD44780width_offset 516
-#define HD44780width_offset_hex 204
-#define HD44780height_offset 520
-#define HD44780height_offset_hex 208
-#define tpsAdcChannel_offset 524
-#define overrideCrankingIgnition_offset 528
-#define overrideCrankingIgnition_offset_hex 210
-#define sensorChartFrequency_offset 532
-#define sensorChartFrequency_offset_hex 214
-#define trigger_offset 536
-#define trigger_offset_hex 218
-#define trigger_type_offset 536
-#define trigger_type_offset_hex 218
-#define trigger_unusedCustomIsSynchronizationNeeded_offset 540
-#define trigger_unusedCustomNeedSecondTriggerInput_offset 540
-#define trigger_useOnlyFirstChannel_offset 540
-#define trigger_customTotalToothCount_offset 544
-#define trigger_customTotalToothCount_offset_hex 220
-#define trigger_customSkippedToothCount_offset 548
-#define trigger_customSkippedToothCount_offset_hex 224
-#define trigger_unusedcustomSyncRatioFrom_offset 552
-#define trigger_unusedcustomSyncRatioFrom_offset_hex 228
-#define trigger_unusedcustomSyncRatioTo_offset 556
-#define trigger_unusedcustomUseRiseEdge_offset 560
-#define trigger_unusedcustomUseRiseEdge_offset_hex 230
-#define hip9011SpiDevice_offset 564
-#define hip9011SpiDevice_offset_hex 234
-#define globalFuelCorrection_offset 568
-#define globalFuelCorrection_offset_hex 238
-#define pedalPositionMin_offset 572
-#define pedalPositionMax_offset 574
-#define maxKnockSubDeg_offset 576
-#define maxKnockSubDeg_offset_hex 240
-#define mafAdcChannel_offset 580
-#define mafAdcChannel_offset_hex 244
-#define afr_offset 584
-#define afr_offset_hex 248
-#define afr_hwChannel_offset 584
-#define afr_hwChannel_offset_hex 248
-#define afr_v1_offset 588
-#define afr_value1_offset 592
-#define afr_value1_offset_hex 250
-#define afr_v2_offset 596
-#define afr_v2_offset_hex 254
-#define afr_value2_offset 600
-#define afr_value2_offset_hex 258
-#define pedalPositionChannel_offset 604
-#define baroSensor_offset 608
-#define baroSensor_offset_hex 260
-#define baroSensor_lowValue_offset 608
-#define baroSensor_lowValue_offset_hex 260
-#define baroSensor_highValue_offset 612
-#define baroSensor_highValue_offset_hex 264
-#define baroSensor_type_offset 616
-#define baroSensor_type_offset_hex 268
-#define baroSensor_hwChannel_offset 620
-#define bc_offset 624
-#define bc_offset_hex 270
-#define idle_offset 624
-#define idle_offset_hex 270
-#define idle_solenoidPin_offset 624
-#define idle_solenoidPin_offset_hex 270
-#define idle_solenoidPinMode_offset 628
-#define idle_solenoidPinMode_offset_hex 274
-#define idle_solenoidFrequency_offset 632
-#define idle_solenoidFrequency_offset_hex 278
-#define idle_stepperDirectionPin_offset 636
-#define idle_stepperStepPin_offset 640
-#define idle_stepperStepPin_offset_hex 280
-#define manIdlePosition_offset 644
-#define manIdlePosition_offset_hex 284
-#define fuelPumpPin_offset 648
-#define fuelPumpPin_offset_hex 288
-#define fuelPumpPinMode_offset 652
-#define injectionPins1_offset 656
-#define injectionPins1_offset_hex 290
-#define injectionPins2_offset 660
-#define injectionPins2_offset_hex 294
-#define injectionPins3_offset 664
-#define injectionPins3_offset_hex 298
-#define injectionPins4_offset 668
-#define injectionPins5_offset 672
-#define injectionPins6_offset 676
-#define injectionPins7_offset 680
-#define injectionPins8_offset 684
-#define injectionPins9_offset 688
-#define injectionPins10_offset 692
-#define injectionPins11_offset 696
-#define injectionPins12_offset 700
-#define injectionPinMode_offset 704
-#define ignitionPins1_offset 708
-#define ignitionPins2_offset 712
-#define ignitionPins3_offset 716
-#define ignitionPins4_offset 720
-#define ignitionPins5_offset 724
-#define ignitionPins6_offset 728
-#define ignitionPins7_offset 732
-#define ignitionPins8_offset 736
-#define ignitionPins9_offset 740
-#define ignitionPins10_offset 744
-#define ignitionPins11_offset 748
-#define ignitionPins12_offset 752
-#define ignitionPinMode_offset 756
-#define malfunctionIndicatorPin_offset 760
-#define malfunctionIndicatorPinMode_offset 764
-#define fanPin_offset 768
-#define fanPin_offset_hex 300
-#define fanPinMode_offset 772
-#define fanPinMode_offset_hex 304
-#define mapFrequency0Kpa_offset 776
-#define mapFrequency0Kpa_offset_hex 308
-#define mapFrequency100Kpa_offset 780
-#define clutchDownPin_offset 784
-#define clutchDownPin_offset_hex 310
-#define clutchDownPinMode_offset 788
-#define clutchDownPinMode_offset_hex 314
-#define alternatorControlPin_offset 792
-#define alternatorControlPin_offset_hex 318
-#define alternatorControlPinMode_offset 796
-#define HD44780_rs_offset 800
-#define HD44780_rs_offset_hex 320
-#define HD44780_e_offset 804
-#define HD44780_e_offset_hex 324
-#define HD44780_db4_offset 808
-#define HD44780_db4_offset_hex 328
-#define HD44780_db5_offset 812
-#define HD44780_db6_offset 816
-#define HD44780_db6_offset_hex 330
-#define HD44780_db7_offset 820
-#define HD44780_db7_offset_hex 334
-#define gps_rx_pin_offset 824
-#define gps_rx_pin_offset_hex 338
-#define gps_tx_pin_offset 828
-#define triggerSimulatorFrequency_offset 832
-#define triggerSimulatorFrequency_offset_hex 340
-#define digitalPotentiometerSpiDevice_offset 836
-#define digitalPotentiometerSpiDevice_offset_hex 344
-#define digitalPotentiometerChipSelect1_offset 840
-#define digitalPotentiometerChipSelect1_offset_hex 348
-#define digitalPotentiometerChipSelect2_offset 844
-#define digitalPotentiometerChipSelect3_offset 848
-#define digitalPotentiometerChipSelect3_offset_hex 350
-#define digitalPotentiometerChipSelect4_offset 852
-#define digitalPotentiometerChipSelect4_offset_hex 354
-#define etbDirectionPin1_offset 856
-#define etbDirectionPin1_offset_hex 358
-#define etbDirectionPin2_offset 860
-#define etbControlPin1_offset 864
-#define etbControlPin1_offset_hex 360
-#define etbControlPin2_offset 868
-#define etbControlPin2_offset_hex 364
-#define electronicThrottlePin1Mode_offset 872
-#define electronicThrottlePin1Mode_offset_hex 368
-#define wboHeaterPin_offset 876
-#define cj125CsPin_offset 880
-#define cj125CsPin_offset_hex 370
-#define fuelLevelEmptyTankVoltage_offset 884
-#define fuelLevelEmptyTankVoltage_offset_hex 374
-#define fuelLevelFullTankVoltage_offset 888
-#define fuelLevelFullTankVoltage_offset_hex 378
-#define afr_type_offset 892
-#define etbDT_offset 896
-#define etbDT_offset_hex 380
-#define hip9011CsPinMode_offset 900
-#define hip9011CsPinMode_offset_hex 384
-#define tachOutputPin_offset 904
-#define tachOutputPin_offset_hex 388
-#define tachOutputPinMode_offset 908
-#define triggerInputPins1_offset 912
-#define triggerInputPins1_offset_hex 390
-#define triggerInputPins2_offset 916
-#define triggerInputPins2_offset_hex 394
-#define triggerInputPins3_offset 920
-#define triggerInputPins3_offset_hex 398
-#define mainRelayPin_offset 924
-#define idleThreadPeriod_offset 928
-#define consoleLoopPeriod_offset 932
-#define lcdThreadPeriod_offset 936
-#define sdCardCsPin_offset 940
-#define generalPeriodicThreadPeriod_offset 944
-#define tunerStudioSerialSpeed_offset 948
-#define boardTestModeJumperPin_offset 952
-#define canDeviceMode_offset 956
-#define canTxPin_offset 960
-#define canRxPin_offset 964
-#define triggerSimulatorPins1_offset 968
-#define triggerSimulatorPins2_offset 972
-#define triggerSimulatorPins3_offset 976
-#define triggerSimulatorPinModes1_offset 980
-#define triggerSimulatorPinModes2_offset 984
-#define triggerSimulatorPinModes3_offset 988
-#define o2heaterPin_offset 992
-#define o2heaterPinModeTodO_offset 996
-#define is_enabled_spi_1_offset 1000
-#define is_enabled_spi_2_offset 1000
-#define is_enabled_spi_3_offset 1000
-#define isSdCardEnabled_offset 1000
-#define isFastAdcEnabled_offset 1000
-#define isEngineControlEnabled_offset 1000
-#define isHip9011Enabled_offset 1000
-#define isVerboseAlternator_offset 1000
-#define useSerialPort_offset 1000
-#define useStepperIdle_offset 1000
-#define enabledStep1Limiter_offset 1000
-#define useTpicAdvancedMode_offset 1000
-#define useLcdScreen_offset 1000
-#define startConsoleInBinaryMode_offset 1000
-#define useWarmupPidAfr_offset 1000
-#define onOffAlternatorLogic_offset 1000
-#define isCJ125Enabled_offset 1000
-#define vvtCamSensorUseRise_offset 1000
-#define logicAnalyzerPins1_offset 1004
-#define logicAnalyzerPins2_offset 1008
-#define logicAnalyzerPins3_offset 1012
-#define logicAnalyzerPins4_offset 1016
-#define logicAnalyzerMode_offset 1020
-#define unrealisticRpmThreashold_offset 1024
-#define unrealisticRpmThreashold_offset_hex 400
-#define mainRelayPinMode_offset 1028
-#define mainRelayPinMode_offset_hex 404
-#define max31855_cs1_offset 1032
-#define max31855_cs1_offset_hex 408
-#define max31855_cs2_offset 1036
-#define max31855_cs3_offset 1040
-#define max31855_cs3_offset_hex 410
-#define max31855_cs4_offset 1044
-#define max31855_cs4_offset_hex 414
-#define max31855_cs5_offset 1048
-#define max31855_cs5_offset_hex 418
-#define max31855_cs6_offset 1052
-#define max31855_cs7_offset 1056
-#define max31855_cs7_offset_hex 420
-#define max31855_cs8_offset 1060
-#define max31855_cs8_offset_hex 424
-#define max31855spiDevice_offset 1064
-#define max31855spiDevice_offset_hex 428
-#define fsioPins1_offset 1068
-#define fsioPins2_offset 1072
-#define fsioPins2_offset_hex 430
-#define fsioPins3_offset 1076
-#define fsioPins3_offset_hex 434
-#define fsioPins4_offset 1080
-#define fsioPins4_offset_hex 438
-#define fsioPins5_offset 1084
-#define fsioPins6_offset 1088
-#define fsioPins6_offset_hex 440
-#define fsioPins7_offset 1092
-#define fsioPins7_offset_hex 444
-#define fsioPins8_offset 1096
-#define fsioPins8_offset_hex 448
-#define fsioPins9_offset 1100
-#define fsioPins10_offset 1104
-#define fsioPins10_offset_hex 450
-#define fsioPins11_offset 1108
-#define fsioPins11_offset_hex 454
-#define fsioPins12_offset 1112
-#define fsioPins12_offset_hex 458
-#define fsioPins13_offset 1116
-#define fsioPins14_offset 1120
-#define fsioPins14_offset_hex 460
-#define fsioPins15_offset 1124
-#define fsioPins15_offset_hex 464
-#define fsioPins16_offset 1128
-#define fsioPins16_offset_hex 468
-#define gpioPinModes1_offset 1132
-#define gpioPinModes2_offset 1136
-#define gpioPinModes2_offset_hex 470
-#define gpioPinModes3_offset 1140
-#define gpioPinModes3_offset_hex 474
-#define gpioPinModes4_offset 1144
-#define gpioPinModes4_offset_hex 478
-#define gpioPinModes5_offset 1148
-#define gpioPinModes6_offset 1152
-#define gpioPinModes6_offset_hex 480
-#define gpioPinModes7_offset 1156
-#define gpioPinModes7_offset_hex 484
-#define gpioPinModes8_offset 1160
-#define gpioPinModes8_offset_hex 488
-#define gpioPinModes9_offset 1164
-#define gpioPinModes10_offset 1168
-#define gpioPinModes10_offset_hex 490
-#define gpioPinModes11_offset 1172
-#define gpioPinModes11_offset_hex 494
-#define gpioPinModes12_offset 1176
-#define gpioPinModes12_offset_hex 498
-#define gpioPinModes13_offset 1180
-#define gpioPinModes14_offset 1184
-#define gpioPinModes15_offset 1188
-#define gpioPinModes16_offset 1192
-#define consoleUartDevice_offset 1196
-#define unused77_offset 1200
-#define unused78_offset 1204
-#define nb2ratioFrom_offset 1208
-#define nb2ratioTo_offset 1212
-#define triggerErrorPin_offset 1216
-#define triggerErrorPinMode_offset 1220
-#define acRelayPin_offset 1224
-#define acRelayPinMode_offset 1228
-#define fsioFrequency1_offset 1232
-#define fsioFrequency2_offset 1234
-#define fsioFrequency3_offset 1236
-#define fsioFrequency4_offset 1238
-#define fsioFrequency5_offset 1240
-#define fsioFrequency6_offset 1242
-#define fsioFrequency7_offset 1244
-#define fsioFrequency8_offset 1246
-#define fsioFrequency9_offset 1248
-#define fsioFrequency10_offset 1250
-#define fsioFrequency11_offset 1252
-#define fsioFrequency12_offset 1254
-#define fsioFrequency13_offset 1256
-#define fsioFrequency14_offset 1258
-#define fsioFrequency15_offset 1260
-#define fsioFrequency16_offset 1262
-#define hip9011CsPin_offset 1264
-#define hip9011IntHoldPin_offset 1268
-#define hip9011IntHoldPinMode_offset 1272
-#define fsio_setting1_offset 1276
-#define fsio_setting2_offset 1280
-#define fsio_setting2_offset_hex 500
-#define fsio_setting3_offset 1284
-#define fsio_setting3_offset_hex 504
-#define fsio_setting4_offset 1288
-#define fsio_setting4_offset_hex 508
-#define fsio_setting5_offset 1292
-#define fsio_setting6_offset 1296
-#define fsio_setting6_offset_hex 510
-#define fsio_setting7_offset 1300
-#define fsio_setting7_offset_hex 514
-#define fsio_setting8_offset 1304
-#define fsio_setting8_offset_hex 518
-#define fsio_setting9_offset 1308
-#define fsio_setting10_offset 1312
-#define fsio_setting10_offset_hex 520
-#define fsio_setting11_offset 1316
-#define fsio_setting11_offset_hex 524
-#define fsio_setting12_offset 1320
-#define fsio_setting12_offset_hex 528
-#define fsio_setting13_offset 1324
-#define fsio_setting14_offset 1328
-#define fsio_setting14_offset_hex 530
-#define fsio_setting15_offset 1332
-#define fsio_setting15_offset_hex 534
-#define fsio_setting16_offset 1336
-#define fsio_setting16_offset_hex 538
-#define spi1mosiPin_offset 1340
-#define spi1misoPin_offset 1344
-#define spi1misoPin_offset_hex 540
-#define spi1sckPin_offset 1348
-#define spi1sckPin_offset_hex 544
-#define spi2mosiPin_offset 1352
-#define spi2mosiPin_offset_hex 548
-#define spi2misoPin_offset 1356
-#define spi2sckPin_offset 1360
-#define spi2sckPin_offset_hex 550
-#define spi3mosiPin_offset 1364
-#define spi3mosiPin_offset_hex 554
-#define spi3misoPin_offset 1368
-#define spi3misoPin_offset_hex 558
-#define spi3sckPin_offset 1372
-#define hip9011Gain_offset 1376
-#define hip9011Gain_offset_hex 560
-#define joystickCenterPin_offset 1380
-#define joystickCenterPin_offset_hex 564
-#define joystickAPin_offset 1384
-#define joystickAPin_offset_hex 568
-#define joystickBPin_offset 1388
-#define joystickCPin_offset 1392
-#define joystickCPin_offset_hex 570
-#define joystickDPin_offset 1396
-#define joystickDPin_offset_hex 574
-#define sensorChartMode_offset 1400
-#define sensorChartMode_offset_hex 578
-#define mafSensorType_offset 1404
-#define vehicleSpeedSensorInputPin_offset 1408
-#define vehicleSpeedSensorInputPin_offset_hex 580
-#define clutchUpPin_offset 1412
-#define clutchUpPin_offset_hex 584
-#define clutchUpPinMode_offset 1416
-#define clutchUpPinMode_offset_hex 588
-#define fsioDigitalInputs1_offset 1420
-#define fsioDigitalInputs2_offset 1424
-#define fsioDigitalInputs2_offset_hex 590
-#define fsioDigitalInputs3_offset 1428
-#define fsioDigitalInputs3_offset_hex 594
-#define fsioDigitalInputs4_offset 1432
-#define fsioDigitalInputs4_offset_hex 598
-#define fsioDigitalInputs5_offset 1436
-#define fsioDigitalInputs6_offset 1440
-#define fsioDigitalInputs7_offset 1444
-#define fsioDigitalInputs8_offset 1448
-#define fsioDigitalInputs9_offset 1452
-#define fsioDigitalInputs10_offset 1456
-#define fsioDigitalInputs11_offset 1460
-#define fsioDigitalInputs12_offset 1464
-#define fsioDigitalInputs13_offset 1468
-#define fsioDigitalInputs14_offset 1472
-#define fsioDigitalInputs15_offset 1476
-#define fsioDigitalInputs16_offset 1480
-#define frequencyReportingMapInputPin_offset 1484
-#define vvtDisplayInverted_offset 1488
-#define fuelClosedLoopCorrectionEnabled_offset 1488
-#define unusedBit__5_offset 1488
-#define unusedBit__6_offset 1488
-#define useConstantDwellDuringCranking_offset 1488
-#define isEngineChartEnabled_offset 1488
-#define unusedBit_7_offset 1488
-#define unusedBit__2_offset 1488
-#define canReadEnabled_offset 1488
-#define canWriteEnabled_offset 1488
-#define unusedBit_123_offset 1488
-#define unusedbit_9_offset 1488
-#define unusedbit_10_offset 1488
-#define isAlternatorControlEnabled_offset 1488
-#define unusedBit__3_offset 1488
-#define unusedbit_8_offset 1488
-#define cutFuelOnHardLimit_offset 1488
-#define cutSparkOnHardLimit_offset 1488
-#define step1fuelCutEnable_offset 1488
-#define step1SparkCutEnable_offset 1488
-#define hasFrequencyReportingMapSensor_offset 1488
-#define hipOutputChannel_offset 1492
-#define idleMode_offset 1496
-#define isInjectionEnabled_offset 1500
-#define isIgnitionEnabled_offset 1500
-#define isCylinderCleanupEnabled_offset 1500
-#define secondTriggerChannelEnabled_offset 1500
-#define needSecondTriggerInputDeprecated_offset 1500
-#define isMapAveragingEnabled_offset 1500
-#define anotherUnusedBit1_offset 1500
-#define anotherUnusedBit2_offset 1500
-#define isTunerStudioEnabled_offset 1500
-#define isWaveAnalyzerEnabled_offset 1500
-#define anotherUnusedBit212_offset 1500
-#define isPrintTriggerSynchDetails_offset 1500
-#define isManualSpinningMode_offset 1500
-#define twoWireBatchInjection_offset 1500
-#define useOnlyRisingEdgeForTrigger_offset 1500
-#define twoWireBatchIgnition_offset 1500
-#define engineChartSize_offset 1504
-#define targetIdleRpm_offset 1508
-#define acSwitchAdc_offset 1512
-#define ignMathCalculateAtIndex_offset 1516
-#define acCutoffLowRpm_offset 1520
-#define acCutoffHighRpm_offset 1522
-#define acIdleRpmBump_offset 1524
-#define warningPeriod_offset 1526
-#define vRefAdcChannel_offset 1528
-#define knockDetectionWindowStart_offset 1532
-#define knockDetectionWindowEnd_offset 1536
-#define knockDetectionWindowEnd_offset_hex 600
-#define idleStepperReactionTime_offset 1540
-#define idleStepperReactionTime_offset_hex 604
-#define knockVThreshold_offset 1544
-#define knockVThreshold_offset_hex 608
-#define fsioInputModes1_offset 1548
-#define fsioInputModes2_offset 1552
-#define fsioInputModes2_offset_hex 610
-#define fsioInputModes3_offset 1556
-#define fsioInputModes3_offset_hex 614
-#define fsioInputModes4_offset 1560
-#define fsioInputModes4_offset_hex 618
-#define fsioInputModes5_offset 1564
-#define fsioInputModes6_offset 1568
-#define fsioInputModes6_offset_hex 620
-#define fsioInputModes7_offset 1572
-#define fsioInputModes7_offset_hex 624
-#define fsioInputModes8_offset 1576
-#define fsioInputModes8_offset_hex 628
-#define fsioInputModes9_offset 1580
-#define fsioInputModes10_offset 1584
-#define fsioInputModes10_offset_hex 630
-#define fsioInputModes11_offset 1588
-#define fsioInputModes11_offset_hex 634
-#define fsioInputModes12_offset 1592
-#define fsioInputModes12_offset_hex 638
-#define fsioInputModes13_offset 1596
-#define fsioInputModes14_offset 1600
-#define fsioInputModes14_offset_hex 640
-#define fsioInputModes15_offset 1604
-#define fsioInputModes15_offset_hex 644
-#define fsioInputModes16_offset 1608
-#define fsioInputModes16_offset_hex 648
-#define externalKnockSenseAdc_offset 1612
-#define unsed2342342_offset 1616
-#define unsed2342342_offset_hex 650
-#define idleStepperTotalSteps_offset 1628
-#define stepperEnablePin_offset 1632
-#define stepperEnablePin_offset_hex 660
-#define noAccelAfterHardLimitPeriodSecs_offset 1636
-#define noAccelAfterHardLimitPeriodSecs_offset_hex 664
-#define mapAveragingSchedulingAtIndex_offset 1640
-#define mapAveragingSchedulingAtIndex_offset_hex 668
-#define baroCorrPressureBins_offset 1644
-#define baroCorrRpmBins_offset 1660
-#define baroCorrTable_offset 1676
-#define spi2SckMode_offset 1740
-#define spi2MosiMode_offset 1744
-#define spi2MisoMode_offset 1748
-#define crankingTpsCoef_offset 1752
-#define crankingTpsBins_offset 1784
-#define tachPulseDuractionMs_offset 1816
-#define tachPulseDuractionMs_offset_hex 718
-#define tachPulseTriggerIndex_offset 1820
-#define suckedOffCoef_offset 1824
-#define suckedOffCoef_offset_hex 720
-#define unused71_offset 1828
-#define unused71_offset_hex 724
-#define addedToWallCoef_offset 1856
-#define addedToWallCoef_offset_hex 740
-#define unused72_offset 1860
-#define unused72_offset_hex 744
-#define mapErrorDetectionTooLow_offset 1888
-#define mapErrorDetectionTooLow_offset_hex 760
-#define mapErrorDetectionTooHigh_offset 1892
-#define mapErrorDetectionTooHigh_offset_hex 764
-#define step1RpmWindow_offset 1896
-#define step1RpmWindow_offset_hex 768
-#define idleRpmPid_offset 1900
-#define idleRpmPid_pFactor_offset 1900
-#define idleRpmPid_iFactor_offset 1904
-#define idleRpmPid_iFactor_offset_hex 770
-#define idleRpmPid_dFactor_offset 1908
-#define idleRpmPid_dFactor_offset_hex 774
-#define idleRpmPid_offset_offset 1912
-#define idleRpmPid_offset_offset_hex 778
-#define idleDT_offset 1916
-#define idleControl_offset 1920
-#define idleControl_offset_hex 780
-#define communicationPin_offset 1924
-#define communicationPin_offset_hex 784
-#define runningPin_offset 1928
-#define runningPin_offset_hex 788
-#define binarySerialTxPin_offset 1932
-#define binarySerialRxPin_offset 1936
-#define binarySerialRxPin_offset_hex 790
-#define consoleSerialTxPin_offset 1940
-#define consoleSerialTxPin_offset_hex 794
-#define consoleSerialRxPin_offset 1944
-#define consoleSerialRxPin_offset_hex 798
-#define knockNoise_offset 1948
-#define knockNoiseRpmBins_offset 1980
-#define etb_offset 2012
-#define etb_pFactor_offset 2012
-#define etb_iFactor_offset 2016
-#define etb_dFactor_offset 2020
-#define etb_offset_offset 2024
-#define cltIdleRpmBins_offset 2028
-#define cltIdleRpm_offset 2092
-#define targetVBatt_offset 2156
-#define alternatorOffAboveTps_offset 2160
-#define alternatorOffAboveTps_offset_hex 870
-#define alternatorDT_offset 2164
-#define alternatorDT_offset_hex 874
-#define alternatorControl_offset 2168
-#define alternatorControl_offset_hex 878
-#define alternatorControl_pFactor_offset 2168
-#define alternatorControl_pFactor_offset_hex 878
-#define alternatorControl_iFactor_offset 2172
-#define alternatorControl_dFactor_offset 2176
-#define alternatorControl_dFactor_offset_hex 880
-#define alternatorControl_offset_offset 2180
-#define alternatorControl_offset_offset_hex 884
-#define tpsAccelLength_offset 2184
-#define tpsAccelLength_offset_hex 888
-#define tpsAccelEnrichmentThreshold_offset 2188
-#define vvtOffset_offset 2192
-#define vvtOffset_offset_hex 890
-#define engineLoadAccelLength_offset 2196
-#define engineLoadAccelLength_offset_hex 894
-#define engineLoadDecelEnleanmentThreshold_offset 2200
-#define engineLoadDecelEnleanmentThreshold_offset_hex 898
-#define engineLoadDecelEnleanmentMultiplier_offset 2204
-#define engineLoadAccelEnrichmentThreshold_offset 2208
-#define engineLoadAccelEnrichmentMultiplier_offset 2212
-#define fatalErrorPin_offset 2216
-#define warninigPin_offset 2220
-#define configResetPin_offset 2224
-#define uartConsoleSerialSpeed_offset 2228
-#define tpsDecelEnleanmentThreshold_offset 2232
-#define tpsDecelEnleanmentMultiplier_offset 2236
-#define slowAdcAlpha_offset 2240
-#define debugMode_offset 2244
-#define warmupAfrPid_offset 2248
-#define warmupAfrPid_pFactor_offset 2248
-#define warmupAfrPid_iFactor_offset 2252
-#define warmupAfrPid_dFactor_offset 2256
-#define warmupAfrPid_offset_offset 2260
-#define warmupTargetAfrBins_offset 2264
-#define warmupTargetAfr_offset 2280
-#define warmupAfrThreshold_offset 2296
-#define boostCutPressure_offset 2300
-#define mapAccelTaperBins_offset 2304
-#define mapAccelTaperBins_offset_hex 900
-#define mapAccelTaperMult_offset 2336
-#define mapAccelTaperMult_offset_hex 920
-#define dizzySparkOutputPin_offset 2368
-#define dizzySparkOutputPin_offset_hex 940
-#define dizzySparkOutputPinMode_offset 2372
-#define dizzySparkOutputPinMode_offset_hex 944
-#define fsioAdc1_offset 2376
-#define fsioAdc1_offset_hex 948
-#define fsioAdc2_offset 2380
-#define fsioAdc3_offset 2384
-#define fsioAdc3_offset_hex 950
-#define fsioAdc4_offset 2388
-#define fsioAdc4_offset_hex 954
-#define fixedTiming_offset 2392
-#define fixedTiming_offset_hex 958
-#define mapLowValueVoltage_offset 2396
-#define mapHighValueVoltage_offset 2400
-#define mapHighValueVoltage_offset_hex 960
-#define egoValueShift_offset 2404
-#define egoValueShift_offset_hex 964
-#define camInput_offset 2408
-#define camInput_offset_hex 968
-#define auxPidDT1_offset 2412
-#define auxPidDT2_offset 2416
-#define auxPidDT2_offset_hex 970
-#define auxPidDT3_offset 2420
-#define auxPidDT3_offset_hex 974
-#define auxPidDT4_offset 2424
-#define auxPidDT4_offset_hex 978
-#define crankingIdleAdjustment_offset 2428
-#define tChargeMinRpmMinTps_offset 2432
-#define tChargeMinRpmMinTps_offset_hex 980
-#define tChargeMinRpmMaxTps_offset 2436
-#define tChargeMinRpmMaxTps_offset_hex 984
-#define tChargeMaxRpmMinTps_offset 2440
-#define tChargeMaxRpmMinTps_offset_hex 988
-#define tChargeMaxRpmMaxTps_offset 2444
-#define auxPidPins1_offset 2448
-#define auxPidPins1_offset_hex 990
-#define auxPidPins2_offset 2452
-#define auxPidPins2_offset_hex 994
-#define auxPidPins3_offset 2456
-#define auxPidPins3_offset_hex 998
-#define auxPidPins4_offset 2460
-#define auxPidFrequency1_offset 2464
-#define auxPidFrequency2_offset 2466
-#define auxPidFrequency3_offset 2468
-#define auxPidFrequency4_offset 2470
-#define alternatorPwmFrequency_offset 2472
-#define storageMode_offset 2476
-#define cj125SpiDevice_offset 2480
-#define cj125CsPinMode_offset 2484
-#define auxPid1_offset 2488
-#define auxPid1_pFactor_offset 2488
-#define auxPid1_iFactor_offset 2492
-#define auxPid1_dFactor_offset 2496
-#define auxPid1_offset_offset 2500
-#define auxPid2_offset 2504
-#define auxPid2_pFactor_offset 2504
-#define auxPid2_iFactor_offset 2508
-#define auxPid2_dFactor_offset 2512
-#define auxPid2_offset_offset 2516
-#define auxPid3_offset 2520
-#define auxPid3_pFactor_offset 2520
-#define auxPid3_iFactor_offset 2524
-#define auxPid3_dFactor_offset 2528
-#define auxPid3_offset_offset 2532
-#define auxPid4_offset 2536
-#define auxPid4_pFactor_offset 2536
-#define auxPid4_iFactor_offset 2540
-#define auxPid4_dFactor_offset 2544
-#define auxPid4_offset_offset 2548
-#define vvtMode_offset 2552
-#define biQuad_offset 2556
-#define biQuad_a0_offset 2556
-#define biQuad_a1_offset 2560
-#define biQuad_a2_offset 2564
-#define biQuad_b1_offset 2568
-#define biQuad_b2_offset 2572
-#define cltTimingBins_offset 2576
-#define cltTimingExtra_offset 2608
-#define nbVvtIndex_offset 2640
-#define autoTuneCltThreshold_offset 2644
-#define autoTuneTpsRocThreshold_offset 2648
-#define autoTuneTpsQuietPeriod_offset 2652
-#define postCrankingTargetClt_offset 2656
-#define postCrankingFactor_offset 2660
-#define postCrankingDurationSec_offset 2664
-#define auxTempSensor1_offset 2668
-#define auxTempSensor1_config_offset 2668
-#define auxTempSensor1_tempC_1_offset 2668
-#define auxTempSensor1_tempC_2_offset 2672
-#define auxTempSensor1_tempC_3_offset 2676
-#define auxTempSensor1_resistance_1_offset 2680
-#define auxTempSensor1_resistance_2_offset 2684
-#define auxTempSensor1_resistance_3_offset 2688
-#define auxTempSensor1_bias_resistor_offset 2692
-#define auxTempSensor1_adcChannel_offset 2696
-#define auxTempSensor2_offset 2700
-#define auxTempSensor2_config_offset 2700
-#define auxTempSensor2_tempC_1_offset 2700
-#define auxTempSensor2_tempC_2_offset 2704
-#define auxTempSensor2_tempC_3_offset 2708
-#define auxTempSensor2_resistance_1_offset 2712
-#define auxTempSensor2_resistance_2_offset 2716
-#define auxTempSensor2_resistance_3_offset 2720
-#define auxTempSensor2_bias_resistor_offset 2724
-#define auxTempSensor2_adcChannel_offset 2728
-#define fuelClosedLoopCltThreshold_offset 2732
-#define fuelClosedLoopTpsThreshold_offset 2734
-#define fuelClosedLoopRpmThreshold_offset 2736
-#define etbFreq_offset 2738
-#define fuelClosedLoopPid_offset 2740
-#define fuelClosedLoopPid_pFactor_offset 2740
-#define fuelClosedLoopPid_iFactor_offset 2744
-#define fuelClosedLoopPid_dFactor_offset 2748
-#define fuelClosedLoopPid_offset_offset 2752
-#define fuelClosedLoopAfrLowThreshold_offset 2756
-#define fuelClosedLoopAfrHighThreshold_offset 2760
-#define stepperEnablePinMode_offset 2764
-#define cj125ua_offset 2768
-#define cj125ur_offset 2772
-#define timing_offset_cylinder1_offset 2776
-#define timing_offset_cylinder2_offset 2780
-#define timing_offset_cylinder3_offset 2784
-#define timing_offset_cylinder4_offset 2788
-#define timing_offset_cylinder5_offset 2792
-#define timing_offset_cylinder6_offset 2796
-#define timing_offset_cylinder7_offset 2800
-#define timing_offset_cylinder8_offset 2804
-#define timing_offset_cylinder9_offset 2808
-#define timing_offset_cylinder10_offset 2812
-#define timing_offset_cylinder11_offset 2816
-#define timing_offset_cylinder12_offset 2820
-#define unused_offset 2824
-#define le_formulas1_offset 3048
-#define le_formulas2_offset 3248
-#define le_formulas3_offset 3448
-#define le_formulas4_offset 3648
-#define le_formulas5_offset 3848
-#define le_formulas6_offset 4048
-#define le_formulas7_offset 4248
-#define le_formulas7_offset_hex 1098
-#define le_formulas8_offset 4448
-#define le_formulas8_offset_hex 1160
-#define le_formulas9_offset 4648
-#define le_formulas9_offset_hex 1228
-#define le_formulas10_offset 4848
-#define le_formulas11_offset 5048
-#define le_formulas12_offset 5248
-#define le_formulas12_offset_hex 1480
-#define le_formulas13_offset 5448
-#define le_formulas13_offset_hex 1548
-#define le_formulas14_offset 5648
-#define le_formulas14_offset_hex 1610
-#define le_formulas15_offset 5848
-#define le_formulas16_offset 6048
-#define timingMultiplier_offset 6248
-#define timingMultiplier_offset_hex 1868
-#define timingAdditive_offset 6448
-#define timingAdditive_offset_hex 1930
-#define cltFuelCorrBins_offset 6648
-#define cltFuelCorr_offset 6712
-#define iatFuelCorrBins_offset 6776
-#define iatFuelCorr_offset 6840
-#define crankingFuelCoef_offset 6904
-#define crankingFuelBins_offset 6936
-#define crankingCycleCoef_offset 6968
-#define crankingCycleBins_offset 7000
-#define cltIdleCorrBins_offset 7032
-#define cltIdleCorr_offset 7096
-#define mafDecoding_offset 7160
-#define mafDecodingBins_offset 8184
-#define ignitionIatCorrTable_offset 9208
-#define ignitionIatCorrLoadBins_offset 10232
-#define ignitionIatCorrRpmBins_offset 10296
-#define ignitionIatCorrRpmBins_offset_hex 2838
-#define injectionPhase_offset 10360
-#define injectionPhase_offset_hex 2878
-#define injPhaseLoadBins_offset 11384
-#define injPhaseRpmBins_offset 11448
-#define fuelTable_offset 11512
-#define fuelLoadBins_offset 12536
-#define fuelRpmBins_offset 12600
-#define fuelRpmBins_offset_hex 3138
-#define ignitionTable_offset 12664
-#define ignitionTable_offset_hex 3178
-#define ignitionLoadBins_offset 13688
-#define ignitionLoadBins_offset_hex 3578
-#define ignitionRpmBins_offset 13752
-#define veTable_offset 13816
-#define veLoadBins_offset 14840
-#define veRpmBins_offset 14904
-#define afrTable_offset 14968
-#define afrLoadBins_offset 15224
-#define afrRpmBins_offset 15288
-#define tpsTpsAccelTable_offset 15352
-#define tpsTpsAccelFromRpmBins_offset 15608
-#define tpsTpsAccelToRpmBins_offset 15640
-#define fsioTable1_offset 15672
-#define fsioTable1LoadBins_offset 15928
-#define fsioTable1RpmBins_offset 15960
-#define fsioTable2_offset 15992
-#define fsioTable2LoadBins_offset 16056
-#define fsioTable2RpmBins_offset 16088
-#define fsioTable3_offset 16120
-#define fsioTable3LoadBins_offset 16184
-#define fsioTable3RpmBins_offset 16216
-#define fsioTable4_offset 16248
-#define fsioTable4LoadBins_offset 16312
-#define fsioTable4RpmBins_offset 16344
-#define TOTAL_CONFIG_SIZE 16376
+#define LE_COMMAND_LENGTH 200
+#define FSIO_ADC_COUNT 4
+#define TS_OUTPUT_SIZE 356
+#define TS_FILE_VERSION 20161225
+#define WARMUP_TARGET_AFR_SIZE 4
+#define MAP_ANGLE_SIZE 8
+#define MAP_WINDOW_SIZE 8
+#define CLT_CURVE_SIZE 16
+#define ENGINE_NOISE_CURVE_SIZE 8
+#define CLT_TIMING_CURVE_SIZE 8
+#define IAT_CURVE_SIZE 16
+#define VBAT_INJECTOR_CURVE_SIZE 8
+#define DWELL_CURVE_SIZE 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 EGT_CHANNEL_COUNT 8
+#define DIGIPOT_COUNT 4
+#define HW_MAX_ADC_INDEX 17
+#define TRIGGER_SIMULATOR_PIN_COUNT 3
+#define LOGIC_ANALYZER_CHANNEL_COUNT 4
+#define LE_COMMAND_COUNT 16
+#define AUX_PID_COUNT 4
+#define FUEL_RPM_COUNT 16
+#define FUEL_LOAD_COUNT 16
+#define FSIO_TABLE_8 8
+#define TPS_TPS_ACCEL_TABLE 8
+#define MAP_ACCEL_TAPER 8
+#define BARO_CORR_SIZE 4
+#define MAF_DECODING_COUNT 256
+#define engineConfiguration_offset 0
+#define engineConfiguration_offset_hex 0
+#define engineType_offset 0
+#define engineType_offset_hex 0
+#define engineSnifferRpmThreshold_offset 4
+#define engineSnifferRpmThreshold_offset_hex 4
+#define injector_offset 8
+#define injector_offset_hex 8
+#define injector_flow_offset 8
+#define injector_flow_offset_hex 8
+#define injector_unusedlag_offset 12
+#define injector_battLagCorrBins_offset 16
+#define injector_battLagCorrBins_offset_hex 10
+#define injector_battLagCorr_offset 48
+#define injector_battLagCorr_offset_hex 30
+#define directSelfStimulation_offset 80
+#define directSelfStimulation_offset_hex 50
+#define activateAuxPid1_offset 80
+#define activateAuxPid1_offset_hex 50
+#define isVerboseAuxPid1_offset 80
+#define isVerboseAuxPid1_offset_hex 50
+#define activateAuxPid2_offset 80
+#define activateAuxPid2_offset_hex 50
+#define isVerboseAuxPid2_offset 80
+#define isVerboseAuxPid2_offset_hex 50
+#define activateAuxPid3_offset 80
+#define activateAuxPid3_offset_hex 50
+#define isVerboseAuxPid3_offset 80
+#define isVerboseAuxPid3_offset_hex 50
+#define activateAuxPid4_offset 80
+#define activateAuxPid4_offset_hex 50
+#define isVerboseAuxPid4_offset 80
+#define isVerboseAuxPid4_offset_hex 50
+#define useBiQuadAnalogFiltering_offset 80
+#define useBiQuadAnalogFiltering_offset_hex 50
+#define issue_294_10_offset 80
+#define issue_294_10_offset_hex 50
+#define issue_294_11_offset 80
+#define issue_294_11_offset_hex 50
+#define issue_294_12_offset 80
+#define issue_294_12_offset_hex 50
+#define issue_294_13_offset 80
+#define issue_294_13_offset_hex 50
+#define issue_294_14_offset 80
+#define issue_294_14_offset_hex 50
+#define issue_294_15_offset 80
+#define issue_294_15_offset_hex 50
+#define issue_294_16_offset 80
+#define issue_294_16_offset_hex 50
+#define issue_294_17_offset 80
+#define issue_294_17_offset_hex 50
+#define issue_294_18_offset 80
+#define issue_294_18_offset_hex 50
+#define issue_294_19_offset 80
+#define issue_294_19_offset_hex 50
+#define issue_294_21_offset 80
+#define issue_294_21_offset_hex 50
+#define issue_294_22_offset 80
+#define issue_294_22_offset_hex 50
+#define issue_294_23_offset 80
+#define issue_294_23_offset_hex 50
+#define issue_294_24_offset 80
+#define issue_294_24_offset_hex 50
+#define issue_294_25_offset 80
+#define issue_294_25_offset_hex 50
+#define issue_294_26_offset 80
+#define issue_294_26_offset_hex 50
+#define issue_294_27_offset 80
+#define issue_294_27_offset_hex 50
+#define issue_294_28_offset 80
+#define issue_294_28_offset_hex 50
+#define issue_294_29_offset 80
+#define issue_294_29_offset_hex 50
+#define tpsMin_offset 84
+#define tpsMin_offset_hex 54
+#define tpsMax_offset 86
+#define tpsMax_offset_hex 56
+#define tpsErrorDetectionTooLow_offset 88
+#define tpsErrorDetectionTooLow_offset_hex 58
+#define tpsErrorDetectionTooHigh_offset 90
+#define cranking_offset 92
+#define cranking_baseFuel_offset 92
+#define cranking_rpm_offset 96
+#define cranking_rpm_offset_hex 60
+#define cranking_alignmentFill_offset 98
+#define cranking_alignmentFill_offset_hex 62
+#define primingSquirtDurationMs_offset 100
+#define primingSquirtDurationMs_offset_hex 64
+#define ignitionDwellForCrankingMs_offset 104
+#define ignitionDwellForCrankingMs_offset_hex 68
+#define crankingChargeAngle_offset 108
+#define map_offset 112
+#define map_offset_hex 70
+#define map_samplingAngleBins_offset 112
+#define map_samplingAngleBins_offset_hex 70
+#define map_samplingAngle_offset 144
+#define map_samplingAngle_offset_hex 90
+#define map_samplingWindowBins_offset 176
+#define map_samplingWindow_offset 208
+#define map_sensor_offset 240
+#define map_sensor_lowValue_offset 240
+#define map_sensor_highValue_offset 244
+#define map_sensor_type_offset 248
+#define map_sensor_hwChannel_offset 252
+#define clt_offset 256
+#define clt_offset_hex 100
+#define clt_config_offset 256
+#define clt_config_offset_hex 100
+#define clt_tempC_1_offset 256
+#define clt_tempC_1_offset_hex 100
+#define clt_tempC_2_offset 260
+#define clt_tempC_2_offset_hex 104
+#define clt_tempC_3_offset 264
+#define clt_tempC_3_offset_hex 108
+#define clt_resistance_1_offset 268
+#define clt_resistance_2_offset 272
+#define clt_resistance_2_offset_hex 110
+#define clt_resistance_3_offset 276
+#define clt_resistance_3_offset_hex 114
+#define clt_bias_resistor_offset 280
+#define clt_bias_resistor_offset_hex 118
+#define clt_adcChannel_offset 284
+#define iat_offset 288
+#define iat_offset_hex 120
+#define iat_config_offset 288
+#define iat_config_offset_hex 120
+#define iat_tempC_1_offset 288
+#define iat_tempC_1_offset_hex 120
+#define iat_tempC_2_offset 292
+#define iat_tempC_2_offset_hex 124
+#define iat_tempC_3_offset 296
+#define iat_tempC_3_offset_hex 128
+#define iat_resistance_1_offset 300
+#define iat_resistance_2_offset 304
+#define iat_resistance_2_offset_hex 130
+#define iat_resistance_3_offset 308
+#define iat_resistance_3_offset_hex 134
+#define iat_bias_resistor_offset 312
+#define iat_bias_resistor_offset_hex 138
+#define iat_adcChannel_offset 316
+#define step1rpm_offset 320
+#define step1rpm_offset_hex 140
+#define step1timing_offset 324
+#define step1timing_offset_hex 144
+#define hip9011PrescalerAndSDO_offset 328
+#define hip9011PrescalerAndSDO_offset_hex 148
+#define knockBandCustom_offset 332
+#define sparkDwellRpmBins_offset 336
+#define sparkDwellRpmBins_offset_hex 150
+#define sparkDwellValues_offset 368
+#define sparkDwellValues_offset_hex 170
+#define specs_offset 400
+#define specs_offset_hex 190
+#define displacement_offset 400
+#define displacement_offset_hex 190
+#define cylindersCount_offset 404
+#define cylindersCount_offset_hex 194
+#define firingOrder_offset 408
+#define firingOrder_offset_hex 198
+#define cylinderBore_offset 412
+#define sensorSnifferRpmThreshold_offset 416
+#define rpmHardLimit_offset 420
+#define fuelAlgorithm_offset 424
+#define crankingInjectionMode_offset 428
+#define injectionMode_offset 432
+#define extraInjectionOffset_offset 436
+#define crankingTimingAngle_offset 440
+#define ignitionMode_offset 444
+#define ignitionOffset_offset 448
+#define timingMode_offset 452
+#define fixedModeTiming_offset 456
+#define globalTriggerAngleOffset_offset 460
+#define analogInputDividerCoefficient_offset 464
+#define vbattDividerCoeff_offset 468
+#define vbattAdcChannel_offset 472
+#define fanOnTemperature_offset 476
+#define fanOffTemperature_offset 480
+#define fuelLevelSensor_offset 484
+#define vehicleSpeedCoef_offset 488
+#define canNbcType_offset 492
+#define canSleepPeriod_offset 496
+#define operationMode_offset 500
+#define displayMode_offset 504
+#define logFormat_offset 508
+#define byFirmwareVersion_offset 512
+#define byFirmwareVersion_offset_hex 200
+#define HD44780width_offset 516
+#define HD44780width_offset_hex 204
+#define HD44780height_offset 520
+#define HD44780height_offset_hex 208
+#define tpsAdcChannel_offset 524
+#define overrideCrankingIgnition_offset 528
+#define overrideCrankingIgnition_offset_hex 210
+#define sensorChartFrequency_offset 532
+#define sensorChartFrequency_offset_hex 214
+#define trigger_offset 536
+#define trigger_offset_hex 218
+#define trigger_type_offset 536
+#define trigger_type_offset_hex 218
+#define trigger_unusedCustomIsSynchronizationNeeded_offset 540
+#define trigger_unusedCustomNeedSecondTriggerInput_offset 540
+#define trigger_useOnlyFirstChannel_offset 540
+#define trigger_customTotalToothCount_offset 544
+#define trigger_customTotalToothCount_offset_hex 220
+#define trigger_customSkippedToothCount_offset 548
+#define trigger_customSkippedToothCount_offset_hex 224
+#define trigger_unusedcustomSyncRatioFrom_offset 552
+#define trigger_unusedcustomSyncRatioFrom_offset_hex 228
+#define trigger_unusedcustomSyncRatioTo_offset 556
+#define trigger_unusedcustomUseRiseEdge_offset 560
+#define trigger_unusedcustomUseRiseEdge_offset_hex 230
+#define hip9011SpiDevice_offset 564
+#define hip9011SpiDevice_offset_hex 234
+#define globalFuelCorrection_offset 568
+#define globalFuelCorrection_offset_hex 238
+#define pedalPositionMin_offset 572
+#define pedalPositionMax_offset 574
+#define maxKnockSubDeg_offset 576
+#define maxKnockSubDeg_offset_hex 240
+#define mafAdcChannel_offset 580
+#define mafAdcChannel_offset_hex 244
+#define afr_offset 584
+#define afr_offset_hex 248
+#define afr_hwChannel_offset 584
+#define afr_hwChannel_offset_hex 248
+#define afr_v1_offset 588
+#define afr_value1_offset 592
+#define afr_value1_offset_hex 250
+#define afr_v2_offset 596
+#define afr_v2_offset_hex 254
+#define afr_value2_offset 600
+#define afr_value2_offset_hex 258
+#define pedalPositionChannel_offset 604
+#define baroSensor_offset 608
+#define baroSensor_offset_hex 260
+#define baroSensor_lowValue_offset 608
+#define baroSensor_lowValue_offset_hex 260
+#define baroSensor_highValue_offset 612
+#define baroSensor_highValue_offset_hex 264
+#define baroSensor_type_offset 616
+#define baroSensor_type_offset_hex 268
+#define baroSensor_hwChannel_offset 620
+#define bc_offset 624
+#define bc_offset_hex 270
+#define idle_offset 624
+#define idle_offset_hex 270
+#define idle_solenoidPin_offset 624
+#define idle_solenoidPin_offset_hex 270
+#define idle_solenoidPinMode_offset 628
+#define idle_solenoidPinMode_offset_hex 274
+#define idle_solenoidFrequency_offset 632
+#define idle_solenoidFrequency_offset_hex 278
+#define idle_stepperDirectionPin_offset 636
+#define idle_stepperStepPin_offset 640
+#define idle_stepperStepPin_offset_hex 280
+#define manIdlePosition_offset 644
+#define manIdlePosition_offset_hex 284
+#define fuelPumpPin_offset 648
+#define fuelPumpPin_offset_hex 288
+#define fuelPumpPinMode_offset 652
+#define injectionPins1_offset 656
+#define injectionPins1_offset_hex 290
+#define injectionPins2_offset 660
+#define injectionPins2_offset_hex 294
+#define injectionPins3_offset 664
+#define injectionPins3_offset_hex 298
+#define injectionPins4_offset 668
+#define injectionPins5_offset 672
+#define injectionPins6_offset 676
+#define injectionPins7_offset 680
+#define injectionPins8_offset 684
+#define injectionPins9_offset 688
+#define injectionPins10_offset 692
+#define injectionPins11_offset 696
+#define injectionPins12_offset 700
+#define injectionPinMode_offset 704
+#define ignitionPins1_offset 708
+#define ignitionPins2_offset 712
+#define ignitionPins3_offset 716
+#define ignitionPins4_offset 720
+#define ignitionPins5_offset 724
+#define ignitionPins6_offset 728
+#define ignitionPins7_offset 732
+#define ignitionPins8_offset 736
+#define ignitionPins9_offset 740
+#define ignitionPins10_offset 744
+#define ignitionPins11_offset 748
+#define ignitionPins12_offset 752
+#define ignitionPinMode_offset 756
+#define malfunctionIndicatorPin_offset 760
+#define malfunctionIndicatorPinMode_offset 764
+#define fanPin_offset 768
+#define fanPin_offset_hex 300
+#define fanPinMode_offset 772
+#define fanPinMode_offset_hex 304
+#define mapFrequency0Kpa_offset 776
+#define mapFrequency0Kpa_offset_hex 308
+#define mapFrequency100Kpa_offset 780
+#define clutchDownPin_offset 784
+#define clutchDownPin_offset_hex 310
+#define clutchDownPinMode_offset 788
+#define clutchDownPinMode_offset_hex 314
+#define alternatorControlPin_offset 792
+#define alternatorControlPin_offset_hex 318
+#define alternatorControlPinMode_offset 796
+#define HD44780_rs_offset 800
+#define HD44780_rs_offset_hex 320
+#define HD44780_e_offset 804
+#define HD44780_e_offset_hex 324
+#define HD44780_db4_offset 808
+#define HD44780_db4_offset_hex 328
+#define HD44780_db5_offset 812
+#define HD44780_db6_offset 816
+#define HD44780_db6_offset_hex 330
+#define HD44780_db7_offset 820
+#define HD44780_db7_offset_hex 334
+#define gps_rx_pin_offset 824
+#define gps_rx_pin_offset_hex 338
+#define gps_tx_pin_offset 828
+#define triggerSimulatorFrequency_offset 832
+#define triggerSimulatorFrequency_offset_hex 340
+#define digitalPotentiometerSpiDevice_offset 836
+#define digitalPotentiometerSpiDevice_offset_hex 344
+#define digitalPotentiometerChipSelect1_offset 840
+#define digitalPotentiometerChipSelect1_offset_hex 348
+#define digitalPotentiometerChipSelect2_offset 844
+#define digitalPotentiometerChipSelect3_offset 848
+#define digitalPotentiometerChipSelect3_offset_hex 350
+#define digitalPotentiometerChipSelect4_offset 852
+#define digitalPotentiometerChipSelect4_offset_hex 354
+#define etbDirectionPin1_offset 856
+#define etbDirectionPin1_offset_hex 358
+#define etbDirectionPin2_offset 860
+#define etbControlPin1_offset 864
+#define etbControlPin1_offset_hex 360
+#define etbControlPin2_offset 868
+#define etbControlPin2_offset_hex 364
+#define electronicThrottlePin1Mode_offset 872
+#define electronicThrottlePin1Mode_offset_hex 368
+#define wboHeaterPin_offset 876
+#define cj125CsPin_offset 880
+#define cj125CsPin_offset_hex 370
+#define fuelLevelEmptyTankVoltage_offset 884
+#define fuelLevelEmptyTankVoltage_offset_hex 374
+#define fuelLevelFullTankVoltage_offset 888
+#define fuelLevelFullTankVoltage_offset_hex 378
+#define afr_type_offset 892
+#define etbDT_offset 896
+#define etbDT_offset_hex 380
+#define hip9011CsPinMode_offset 900
+#define hip9011CsPinMode_offset_hex 384
+#define tachOutputPin_offset 904
+#define tachOutputPin_offset_hex 388
+#define tachOutputPinMode_offset 908
+#define triggerInputPins1_offset 912
+#define triggerInputPins1_offset_hex 390
+#define triggerInputPins2_offset 916
+#define triggerInputPins2_offset_hex 394
+#define triggerInputPins3_offset 920
+#define triggerInputPins3_offset_hex 398
+#define mainRelayPin_offset 924
+#define idleThreadPeriod_offset 928
+#define consoleLoopPeriod_offset 932
+#define lcdThreadPeriod_offset 936
+#define sdCardCsPin_offset 940
+#define generalPeriodicThreadPeriod_offset 944
+#define tunerStudioSerialSpeed_offset 948
+#define boardTestModeJumperPin_offset 952
+#define canDeviceMode_offset 956
+#define canTxPin_offset 960
+#define canRxPin_offset 964
+#define triggerSimulatorPins1_offset 968
+#define triggerSimulatorPins2_offset 972
+#define triggerSimulatorPins3_offset 976
+#define triggerSimulatorPinModes1_offset 980
+#define triggerSimulatorPinModes2_offset 984
+#define triggerSimulatorPinModes3_offset 988
+#define o2heaterPin_offset 992
+#define o2heaterPinModeTodO_offset 996
+#define is_enabled_spi_1_offset 1000
+#define is_enabled_spi_2_offset 1000
+#define is_enabled_spi_3_offset 1000
+#define isSdCardEnabled_offset 1000
+#define isFastAdcEnabled_offset 1000
+#define isEngineControlEnabled_offset 1000
+#define isHip9011Enabled_offset 1000
+#define isVerboseAlternator_offset 1000
+#define useSerialPort_offset 1000
+#define useStepperIdle_offset 1000
+#define enabledStep1Limiter_offset 1000
+#define useTpicAdvancedMode_offset 1000
+#define useLcdScreen_offset 1000
+#define startConsoleInBinaryMode_offset 1000
+#define useWarmupPidAfr_offset 1000
+#define onOffAlternatorLogic_offset 1000
+#define isCJ125Enabled_offset 1000
+#define vvtCamSensorUseRise_offset 1000
+#define logicAnalyzerPins1_offset 1004
+#define logicAnalyzerPins2_offset 1008
+#define logicAnalyzerPins3_offset 1012
+#define logicAnalyzerPins4_offset 1016
+#define logicAnalyzerMode_offset 1020
+#define unrealisticRpmThreashold_offset 1024
+#define unrealisticRpmThreashold_offset_hex 400
+#define mainRelayPinMode_offset 1028
+#define mainRelayPinMode_offset_hex 404
+#define max31855_cs1_offset 1032
+#define max31855_cs1_offset_hex 408
+#define max31855_cs2_offset 1036
+#define max31855_cs3_offset 1040
+#define max31855_cs3_offset_hex 410
+#define max31855_cs4_offset 1044
+#define max31855_cs4_offset_hex 414
+#define max31855_cs5_offset 1048
+#define max31855_cs5_offset_hex 418
+#define max31855_cs6_offset 1052
+#define max31855_cs7_offset 1056
+#define max31855_cs7_offset_hex 420
+#define max31855_cs8_offset 1060
+#define max31855_cs8_offset_hex 424
+#define max31855spiDevice_offset 1064
+#define max31855spiDevice_offset_hex 428
+#define fsioPins1_offset 1068
+#define fsioPins2_offset 1072
+#define fsioPins2_offset_hex 430
+#define fsioPins3_offset 1076
+#define fsioPins3_offset_hex 434
+#define fsioPins4_offset 1080
+#define fsioPins4_offset_hex 438
+#define fsioPins5_offset 1084
+#define fsioPins6_offset 1088
+#define fsioPins6_offset_hex 440
+#define fsioPins7_offset 1092
+#define fsioPins7_offset_hex 444
+#define fsioPins8_offset 1096
+#define fsioPins8_offset_hex 448
+#define fsioPins9_offset 1100
+#define fsioPins10_offset 1104
+#define fsioPins10_offset_hex 450
+#define fsioPins11_offset 1108
+#define fsioPins11_offset_hex 454
+#define fsioPins12_offset 1112
+#define fsioPins12_offset_hex 458
+#define fsioPins13_offset 1116
+#define fsioPins14_offset 1120
+#define fsioPins14_offset_hex 460
+#define fsioPins15_offset 1124
+#define fsioPins15_offset_hex 464
+#define fsioPins16_offset 1128
+#define fsioPins16_offset_hex 468
+#define gpioPinModes1_offset 1132
+#define gpioPinModes2_offset 1136
+#define gpioPinModes2_offset_hex 470
+#define gpioPinModes3_offset 1140
+#define gpioPinModes3_offset_hex 474
+#define gpioPinModes4_offset 1144
+#define gpioPinModes4_offset_hex 478
+#define gpioPinModes5_offset 1148
+#define gpioPinModes6_offset 1152
+#define gpioPinModes6_offset_hex 480
+#define gpioPinModes7_offset 1156
+#define gpioPinModes7_offset_hex 484
+#define gpioPinModes8_offset 1160
+#define gpioPinModes8_offset_hex 488
+#define gpioPinModes9_offset 1164
+#define gpioPinModes10_offset 1168
+#define gpioPinModes10_offset_hex 490
+#define gpioPinModes11_offset 1172
+#define gpioPinModes11_offset_hex 494
+#define gpioPinModes12_offset 1176
+#define gpioPinModes12_offset_hex 498
+#define gpioPinModes13_offset 1180
+#define gpioPinModes14_offset 1184
+#define gpioPinModes15_offset 1188
+#define gpioPinModes16_offset 1192
+#define consoleUartDevice_offset 1196
+#define unused77_offset 1200
+#define unused78_offset 1204
+#define nb2ratioFrom_offset 1208
+#define nb2ratioTo_offset 1212
+#define triggerErrorPin_offset 1216
+#define triggerErrorPinMode_offset 1220
+#define acRelayPin_offset 1224
+#define acRelayPinMode_offset 1228
+#define fsioFrequency1_offset 1232
+#define fsioFrequency2_offset 1234
+#define fsioFrequency3_offset 1236
+#define fsioFrequency4_offset 1238
+#define fsioFrequency5_offset 1240
+#define fsioFrequency6_offset 1242
+#define fsioFrequency7_offset 1244
+#define fsioFrequency8_offset 1246
+#define fsioFrequency9_offset 1248
+#define fsioFrequency10_offset 1250
+#define fsioFrequency11_offset 1252
+#define fsioFrequency12_offset 1254
+#define fsioFrequency13_offset 1256
+#define fsioFrequency14_offset 1258
+#define fsioFrequency15_offset 1260
+#define fsioFrequency16_offset 1262
+#define hip9011CsPin_offset 1264
+#define hip9011IntHoldPin_offset 1268
+#define hip9011IntHoldPinMode_offset 1272
+#define fsio_setting1_offset 1276
+#define fsio_setting2_offset 1280
+#define fsio_setting2_offset_hex 500
+#define fsio_setting3_offset 1284
+#define fsio_setting3_offset_hex 504
+#define fsio_setting4_offset 1288
+#define fsio_setting4_offset_hex 508
+#define fsio_setting5_offset 1292
+#define fsio_setting6_offset 1296
+#define fsio_setting6_offset_hex 510
+#define fsio_setting7_offset 1300
+#define fsio_setting7_offset_hex 514
+#define fsio_setting8_offset 1304
+#define fsio_setting8_offset_hex 518
+#define fsio_setting9_offset 1308
+#define fsio_setting10_offset 1312
+#define fsio_setting10_offset_hex 520
+#define fsio_setting11_offset 1316
+#define fsio_setting11_offset_hex 524
+#define fsio_setting12_offset 1320
+#define fsio_setting12_offset_hex 528
+#define fsio_setting13_offset 1324
+#define fsio_setting14_offset 1328
+#define fsio_setting14_offset_hex 530
+#define fsio_setting15_offset 1332
+#define fsio_setting15_offset_hex 534
+#define fsio_setting16_offset 1336
+#define fsio_setting16_offset_hex 538
+#define spi1mosiPin_offset 1340
+#define spi1misoPin_offset 1344
+#define spi1misoPin_offset_hex 540
+#define spi1sckPin_offset 1348
+#define spi1sckPin_offset_hex 544
+#define spi2mosiPin_offset 1352
+#define spi2mosiPin_offset_hex 548
+#define spi2misoPin_offset 1356
+#define spi2sckPin_offset 1360
+#define spi2sckPin_offset_hex 550
+#define spi3mosiPin_offset 1364
+#define spi3mosiPin_offset_hex 554
+#define spi3misoPin_offset 1368
+#define spi3misoPin_offset_hex 558
+#define spi3sckPin_offset 1372
+#define hip9011Gain_offset 1376
+#define hip9011Gain_offset_hex 560
+#define joystickCenterPin_offset 1380
+#define joystickCenterPin_offset_hex 564
+#define joystickAPin_offset 1384
+#define joystickAPin_offset_hex 568
+#define joystickBPin_offset 1388
+#define joystickCPin_offset 1392
+#define joystickCPin_offset_hex 570
+#define joystickDPin_offset 1396
+#define joystickDPin_offset_hex 574
+#define sensorChartMode_offset 1400
+#define sensorChartMode_offset_hex 578
+#define mafSensorType_offset 1404
+#define vehicleSpeedSensorInputPin_offset 1408
+#define vehicleSpeedSensorInputPin_offset_hex 580
+#define clutchUpPin_offset 1412
+#define clutchUpPin_offset_hex 584
+#define clutchUpPinMode_offset 1416
+#define clutchUpPinMode_offset_hex 588
+#define fsioDigitalInputs1_offset 1420
+#define fsioDigitalInputs2_offset 1424
+#define fsioDigitalInputs2_offset_hex 590
+#define fsioDigitalInputs3_offset 1428
+#define fsioDigitalInputs3_offset_hex 594
+#define fsioDigitalInputs4_offset 1432
+#define fsioDigitalInputs4_offset_hex 598
+#define fsioDigitalInputs5_offset 1436
+#define fsioDigitalInputs6_offset 1440
+#define fsioDigitalInputs7_offset 1444
+#define fsioDigitalInputs8_offset 1448
+#define fsioDigitalInputs9_offset 1452
+#define fsioDigitalInputs10_offset 1456
+#define fsioDigitalInputs11_offset 1460
+#define fsioDigitalInputs12_offset 1464
+#define fsioDigitalInputs13_offset 1468
+#define fsioDigitalInputs14_offset 1472
+#define fsioDigitalInputs15_offset 1476
+#define fsioDigitalInputs16_offset 1480
+#define frequencyReportingMapInputPin_offset 1484
+#define vvtDisplayInverted_offset 1488
+#define fuelClosedLoopCorrectionEnabled_offset 1488
+#define unusedBit__5_offset 1488
+#define unusedBit__6_offset 1488
+#define useConstantDwellDuringCranking_offset 1488
+#define isEngineChartEnabled_offset 1488
+#define unusedBit_7_offset 1488
+#define unusedBit__2_offset 1488
+#define canReadEnabled_offset 1488
+#define canWriteEnabled_offset 1488
+#define unusedBit_123_offset 1488
+#define unusedbit_9_offset 1488
+#define unusedbit_10_offset 1488
+#define isAlternatorControlEnabled_offset 1488
+#define unusedBit__3_offset 1488
+#define unusedbit_8_offset 1488
+#define cutFuelOnHardLimit_offset 1488
+#define cutSparkOnHardLimit_offset 1488
+#define step1fuelCutEnable_offset 1488
+#define step1SparkCutEnable_offset 1488
+#define hasFrequencyReportingMapSensor_offset 1488
+#define hipOutputChannel_offset 1492
+#define idleMode_offset 1496
+#define isInjectionEnabled_offset 1500
+#define isIgnitionEnabled_offset 1500
+#define isCylinderCleanupEnabled_offset 1500
+#define secondTriggerChannelEnabled_offset 1500
+#define needSecondTriggerInputDeprecated_offset 1500
+#define isMapAveragingEnabled_offset 1500
+#define anotherUnusedBit1_offset 1500
+#define anotherUnusedBit2_offset 1500
+#define isTunerStudioEnabled_offset 1500
+#define isWaveAnalyzerEnabled_offset 1500
+#define anotherUnusedBit212_offset 1500
+#define isPrintTriggerSynchDetails_offset 1500
+#define isManualSpinningMode_offset 1500
+#define twoWireBatchInjection_offset 1500
+#define useOnlyRisingEdgeForTrigger_offset 1500
+#define twoWireBatchIgnition_offset 1500
+#define engineChartSize_offset 1504
+#define targetIdleRpm_offset 1508
+#define acSwitchAdc_offset 1512
+#define ignMathCalculateAtIndex_offset 1516
+#define acCutoffLowRpm_offset 1520
+#define acCutoffHighRpm_offset 1522
+#define acIdleRpmBump_offset 1524
+#define warningPeriod_offset 1526
+#define vRefAdcChannel_offset 1528
+#define knockDetectionWindowStart_offset 1532
+#define knockDetectionWindowEnd_offset 1536
+#define knockDetectionWindowEnd_offset_hex 600
+#define idleStepperReactionTime_offset 1540
+#define idleStepperReactionTime_offset_hex 604
+#define knockVThreshold_offset 1544
+#define knockVThreshold_offset_hex 608
+#define fsioInputModes1_offset 1548
+#define fsioInputModes2_offset 1552
+#define fsioInputModes2_offset_hex 610
+#define fsioInputModes3_offset 1556
+#define fsioInputModes3_offset_hex 614
+#define fsioInputModes4_offset 1560
+#define fsioInputModes4_offset_hex 618
+#define fsioInputModes5_offset 1564
+#define fsioInputModes6_offset 1568
+#define fsioInputModes6_offset_hex 620
+#define fsioInputModes7_offset 1572
+#define fsioInputModes7_offset_hex 624
+#define fsioInputModes8_offset 1576
+#define fsioInputModes8_offset_hex 628
+#define fsioInputModes9_offset 1580
+#define fsioInputModes10_offset 1584
+#define fsioInputModes10_offset_hex 630
+#define fsioInputModes11_offset 1588
+#define fsioInputModes11_offset_hex 634
+#define fsioInputModes12_offset 1592
+#define fsioInputModes12_offset_hex 638
+#define fsioInputModes13_offset 1596
+#define fsioInputModes14_offset 1600
+#define fsioInputModes14_offset_hex 640
+#define fsioInputModes15_offset 1604
+#define fsioInputModes15_offset_hex 644
+#define fsioInputModes16_offset 1608
+#define fsioInputModes16_offset_hex 648
+#define externalKnockSenseAdc_offset 1612
+#define unsed2342342_offset 1616
+#define unsed2342342_offset_hex 650
+#define idleStepperTotalSteps_offset 1628
+#define stepperEnablePin_offset 1632
+#define stepperEnablePin_offset_hex 660
+#define noAccelAfterHardLimitPeriodSecs_offset 1636
+#define noAccelAfterHardLimitPeriodSecs_offset_hex 664
+#define mapAveragingSchedulingAtIndex_offset 1640
+#define mapAveragingSchedulingAtIndex_offset_hex 668
+#define baroCorrPressureBins_offset 1644
+#define baroCorrRpmBins_offset 1660
+#define baroCorrTable_offset 1676
+#define spi2SckMode_offset 1740
+#define spi2MosiMode_offset 1744
+#define spi2MisoMode_offset 1748
+#define crankingTpsCoef_offset 1752
+#define crankingTpsBins_offset 1784
+#define tachPulseDuractionMs_offset 1816
+#define tachPulseDuractionMs_offset_hex 718
+#define tachPulseTriggerIndex_offset 1820
+#define suckedOffCoef_offset 1824
+#define suckedOffCoef_offset_hex 720
+#define unused71_offset 1828
+#define unused71_offset_hex 724
+#define addedToWallCoef_offset 1856
+#define addedToWallCoef_offset_hex 740
+#define unused72_offset 1860
+#define unused72_offset_hex 744
+#define mapErrorDetectionTooLow_offset 1888
+#define mapErrorDetectionTooLow_offset_hex 760
+#define mapErrorDetectionTooHigh_offset 1892
+#define mapErrorDetectionTooHigh_offset_hex 764
+#define step1RpmWindow_offset 1896
+#define step1RpmWindow_offset_hex 768
+#define idleRpmPid_offset 1900
+#define idleRpmPid_pFactor_offset 1900
+#define idleRpmPid_iFactor_offset 1904
+#define idleRpmPid_iFactor_offset_hex 770
+#define idleRpmPid_dFactor_offset 1908
+#define idleRpmPid_dFactor_offset_hex 774
+#define idleRpmPid_offset_offset 1912
+#define idleRpmPid_offset_offset_hex 778
+#define idleDT_offset 1916
+#define idleControl_offset 1920
+#define idleControl_offset_hex 780
+#define communicationPin_offset 1924
+#define communicationPin_offset_hex 784
+#define runningPin_offset 1928
+#define runningPin_offset_hex 788
+#define binarySerialTxPin_offset 1932
+#define binarySerialRxPin_offset 1936
+#define binarySerialRxPin_offset_hex 790
+#define consoleSerialTxPin_offset 1940
+#define consoleSerialTxPin_offset_hex 794
+#define consoleSerialRxPin_offset 1944
+#define consoleSerialRxPin_offset_hex 798
+#define knockNoise_offset 1948
+#define knockNoiseRpmBins_offset 1980
+#define etb_offset 2012
+#define etb_pFactor_offset 2012
+#define etb_iFactor_offset 2016
+#define etb_dFactor_offset 2020
+#define etb_offset_offset 2024
+#define cltIdleRpmBins_offset 2028
+#define cltIdleRpm_offset 2092
+#define targetVBatt_offset 2156
+#define alternatorOffAboveTps_offset 2160
+#define alternatorOffAboveTps_offset_hex 870
+#define alternatorDT_offset 2164
+#define alternatorDT_offset_hex 874
+#define alternatorControl_offset 2168
+#define alternatorControl_offset_hex 878
+#define alternatorControl_pFactor_offset 2168
+#define alternatorControl_pFactor_offset_hex 878
+#define alternatorControl_iFactor_offset 2172
+#define alternatorControl_dFactor_offset 2176
+#define alternatorControl_dFactor_offset_hex 880
+#define alternatorControl_offset_offset 2180
+#define alternatorControl_offset_offset_hex 884
+#define tpsAccelLength_offset 2184
+#define tpsAccelLength_offset_hex 888
+#define tpsAccelEnrichmentThreshold_offset 2188
+#define vvtOffset_offset 2192
+#define vvtOffset_offset_hex 890
+#define engineLoadAccelLength_offset 2196
+#define engineLoadAccelLength_offset_hex 894
+#define engineLoadDecelEnleanmentThreshold_offset 2200
+#define engineLoadDecelEnleanmentThreshold_offset_hex 898
+#define engineLoadDecelEnleanmentMultiplier_offset 2204
+#define engineLoadAccelEnrichmentThreshold_offset 2208
+#define engineLoadAccelEnrichmentMultiplier_offset 2212
+#define fatalErrorPin_offset 2216
+#define warninigPin_offset 2220
+#define configResetPin_offset 2224
+#define uartConsoleSerialSpeed_offset 2228
+#define tpsDecelEnleanmentThreshold_offset 2232
+#define tpsDecelEnleanmentMultiplier_offset 2236
+#define slowAdcAlpha_offset 2240
+#define debugMode_offset 2244
+#define warmupAfrPid_offset 2248
+#define warmupAfrPid_pFactor_offset 2248
+#define warmupAfrPid_iFactor_offset 2252
+#define warmupAfrPid_dFactor_offset 2256
+#define warmupAfrPid_offset_offset 2260
+#define warmupTargetAfrBins_offset 2264
+#define warmupTargetAfr_offset 2280
+#define warmupAfrThreshold_offset 2296
+#define boostCutPressure_offset 2300
+#define mapAccelTaperBins_offset 2304
+#define mapAccelTaperBins_offset_hex 900
+#define mapAccelTaperMult_offset 2336
+#define mapAccelTaperMult_offset_hex 920
+#define dizzySparkOutputPin_offset 2368
+#define dizzySparkOutputPin_offset_hex 940
+#define dizzySparkOutputPinMode_offset 2372
+#define dizzySparkOutputPinMode_offset_hex 944
+#define fsioAdc1_offset 2376
+#define fsioAdc1_offset_hex 948
+#define fsioAdc2_offset 2380
+#define fsioAdc3_offset 2384
+#define fsioAdc3_offset_hex 950
+#define fsioAdc4_offset 2388
+#define fsioAdc4_offset_hex 954
+#define fixedTiming_offset 2392
+#define fixedTiming_offset_hex 958
+#define mapLowValueVoltage_offset 2396
+#define mapHighValueVoltage_offset 2400
+#define mapHighValueVoltage_offset_hex 960
+#define egoValueShift_offset 2404
+#define egoValueShift_offset_hex 964
+#define camInput_offset 2408
+#define camInput_offset_hex 968
+#define auxPidDT1_offset 2412
+#define auxPidDT2_offset 2416
+#define auxPidDT2_offset_hex 970
+#define auxPidDT3_offset 2420
+#define auxPidDT3_offset_hex 974
+#define auxPidDT4_offset 2424
+#define auxPidDT4_offset_hex 978
+#define crankingIdleAdjustment_offset 2428
+#define tChargeMinRpmMinTps_offset 2432
+#define tChargeMinRpmMinTps_offset_hex 980
+#define tChargeMinRpmMaxTps_offset 2436
+#define tChargeMinRpmMaxTps_offset_hex 984
+#define tChargeMaxRpmMinTps_offset 2440
+#define tChargeMaxRpmMinTps_offset_hex 988
+#define tChargeMaxRpmMaxTps_offset 2444
+#define auxPidPins1_offset 2448
+#define auxPidPins1_offset_hex 990
+#define auxPidPins2_offset 2452
+#define auxPidPins2_offset_hex 994
+#define auxPidPins3_offset 2456
+#define auxPidPins3_offset_hex 998
+#define auxPidPins4_offset 2460
+#define auxPidFrequency1_offset 2464
+#define auxPidFrequency2_offset 2466
+#define auxPidFrequency3_offset 2468
+#define auxPidFrequency4_offset 2470
+#define alternatorPwmFrequency_offset 2472
+#define storageMode_offset 2476
+#define cj125SpiDevice_offset 2480
+#define cj125CsPinMode_offset 2484
+#define auxPid1_offset 2488
+#define auxPid1_pFactor_offset 2488
+#define auxPid1_iFactor_offset 2492
+#define auxPid1_dFactor_offset 2496
+#define auxPid1_offset_offset 2500
+#define auxPid2_offset 2504
+#define auxPid2_pFactor_offset 2504
+#define auxPid2_iFactor_offset 2508
+#define auxPid2_dFactor_offset 2512
+#define auxPid2_offset_offset 2516
+#define auxPid3_offset 2520
+#define auxPid3_pFactor_offset 2520
+#define auxPid3_iFactor_offset 2524
+#define auxPid3_dFactor_offset 2528
+#define auxPid3_offset_offset 2532
+#define auxPid4_offset 2536
+#define auxPid4_pFactor_offset 2536
+#define auxPid4_iFactor_offset 2540
+#define auxPid4_dFactor_offset 2544
+#define auxPid4_offset_offset 2548
+#define vvtMode_offset 2552
+#define biQuad_offset 2556
+#define biQuad_a0_offset 2556
+#define biQuad_a1_offset 2560
+#define biQuad_a2_offset 2564
+#define biQuad_b1_offset 2568
+#define biQuad_b2_offset 2572
+#define cltTimingBins_offset 2576
+#define cltTimingExtra_offset 2608
+#define nbVvtIndex_offset 2640
+#define autoTuneCltThreshold_offset 2644
+#define autoTuneTpsRocThreshold_offset 2648
+#define autoTuneTpsQuietPeriod_offset 2652
+#define postCrankingTargetClt_offset 2656
+#define postCrankingFactor_offset 2660
+#define postCrankingDurationSec_offset 2664
+#define auxTempSensor1_offset 2668
+#define auxTempSensor1_config_offset 2668
+#define auxTempSensor1_tempC_1_offset 2668
+#define auxTempSensor1_tempC_2_offset 2672
+#define auxTempSensor1_tempC_3_offset 2676
+#define auxTempSensor1_resistance_1_offset 2680
+#define auxTempSensor1_resistance_2_offset 2684
+#define auxTempSensor1_resistance_3_offset 2688
+#define auxTempSensor1_bias_resistor_offset 2692
+#define auxTempSensor1_adcChannel_offset 2696
+#define auxTempSensor2_offset 2700
+#define auxTempSensor2_config_offset 2700
+#define auxTempSensor2_tempC_1_offset 2700
+#define auxTempSensor2_tempC_2_offset 2704
+#define auxTempSensor2_tempC_3_offset 2708
+#define auxTempSensor2_resistance_1_offset 2712
+#define auxTempSensor2_resistance_2_offset 2716
+#define auxTempSensor2_resistance_3_offset 2720
+#define auxTempSensor2_bias_resistor_offset 2724
+#define auxTempSensor2_adcChannel_offset 2728
+#define fuelClosedLoopCltThreshold_offset 2732
+#define fuelClosedLoopTpsThreshold_offset 2734
+#define fuelClosedLoopRpmThreshold_offset 2736
+#define etbFreq_offset 2738
+#define fuelClosedLoopPid_offset 2740
+#define fuelClosedLoopPid_pFactor_offset 2740
+#define fuelClosedLoopPid_iFactor_offset 2744
+#define fuelClosedLoopPid_dFactor_offset 2748
+#define fuelClosedLoopPid_offset_offset 2752
+#define fuelClosedLoopAfrLowThreshold_offset 2756
+#define fuelClosedLoopAfrHighThreshold_offset 2760
+#define stepperEnablePinMode_offset 2764
+#define cj125ua_offset 2768
+#define cj125ur_offset 2772
+#define timing_offset_cylinder1_offset 2776
+#define timing_offset_cylinder2_offset 2780
+#define timing_offset_cylinder3_offset 2784
+#define timing_offset_cylinder4_offset 2788
+#define timing_offset_cylinder5_offset 2792
+#define timing_offset_cylinder6_offset 2796
+#define timing_offset_cylinder7_offset 2800
+#define timing_offset_cylinder8_offset 2804
+#define timing_offset_cylinder9_offset 2808
+#define timing_offset_cylinder10_offset 2812
+#define timing_offset_cylinder11_offset 2816
+#define timing_offset_cylinder12_offset 2820
+#define unused_offset 2824
+#define le_formulas1_offset 3048
+#define le_formulas2_offset 3248
+#define le_formulas3_offset 3448
+#define le_formulas4_offset 3648
+#define le_formulas5_offset 3848
+#define le_formulas6_offset 4048
+#define le_formulas7_offset 4248
+#define le_formulas7_offset_hex 1098
+#define le_formulas8_offset 4448
+#define le_formulas8_offset_hex 1160
+#define le_formulas9_offset 4648
+#define le_formulas9_offset_hex 1228
+#define le_formulas10_offset 4848
+#define le_formulas11_offset 5048
+#define le_formulas12_offset 5248
+#define le_formulas12_offset_hex 1480
+#define le_formulas13_offset 5448
+#define le_formulas13_offset_hex 1548
+#define le_formulas14_offset 5648
+#define le_formulas14_offset_hex 1610
+#define le_formulas15_offset 5848
+#define le_formulas16_offset 6048
+#define timingMultiplier_offset 6248
+#define timingMultiplier_offset_hex 1868
+#define timingAdditive_offset 6448
+#define timingAdditive_offset_hex 1930
+#define cltFuelCorrBins_offset 6648
+#define cltFuelCorr_offset 6712
+#define iatFuelCorrBins_offset 6776
+#define iatFuelCorr_offset 6840
+#define crankingFuelCoef_offset 6904
+#define crankingFuelBins_offset 6936
+#define crankingCycleCoef_offset 6968
+#define crankingCycleBins_offset 7000
+#define cltIdleCorrBins_offset 7032
+#define cltIdleCorr_offset 7096
+#define mafDecoding_offset 7160
+#define mafDecodingBins_offset 8184
+#define ignitionIatCorrTable_offset 9208
+#define ignitionIatCorrLoadBins_offset 10232
+#define ignitionIatCorrRpmBins_offset 10296
+#define ignitionIatCorrRpmBins_offset_hex 2838
+#define injectionPhase_offset 10360
+#define injectionPhase_offset_hex 2878
+#define injPhaseLoadBins_offset 11384
+#define injPhaseRpmBins_offset 11448
+#define fuelTable_offset 11512
+#define fuelLoadBins_offset 12536
+#define fuelRpmBins_offset 12600
+#define fuelRpmBins_offset_hex 3138
+#define ignitionTable_offset 12664
+#define ignitionTable_offset_hex 3178
+#define ignitionLoadBins_offset 13688
+#define ignitionLoadBins_offset_hex 3578
+#define ignitionRpmBins_offset 13752
+#define veTable_offset 13816
+#define veLoadBins_offset 14840
+#define veRpmBins_offset 14904
+#define afrTable_offset 14968
+#define afrLoadBins_offset 15224
+#define afrRpmBins_offset 15288
+#define tpsTpsAccelTable_offset 15352
+#define tpsTpsAccelFromRpmBins_offset 15608
+#define tpsTpsAccelToRpmBins_offset 15640
+#define fsioTable1_offset 15672
+#define fsioTable1LoadBins_offset 15928
+#define fsioTable1RpmBins_offset 15960
+#define fsioTable2_offset 15992
+#define fsioTable2LoadBins_offset 16056
+#define fsioTable2RpmBins_offset 16088
+#define fsioTable3_offset 16120
+#define fsioTable3LoadBins_offset 16184
+#define fsioTable3RpmBins_offset 16216
+#define fsioTable4_offset 16248
+#define fsioTable4LoadBins_offset 16312
+#define fsioTable4RpmBins_offset 16344
+#define TOTAL_CONFIG_SIZE 16376
diff --git a/firmware/development/engine_sniffer.h b/firmware/development/engine_sniffer.h
index 7e8f50cd04..7cba75577f 100644
--- a/firmware/development/engine_sniffer.h
+++ b/firmware/development/engine_sniffer.h
@@ -1,43 +1,43 @@
-/**
- * @file engine_sniffer.h
- * @brief Dev console wave sniffer
- *
- * @date Jun 23, 2013
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#ifndef WAVE_CHART_H_
-#define WAVE_CHART_H_
-
-#include "global.h"
-
-#if EFI_ENGINE_SNIFFER || defined(__DOXYGEN__)
-#include "datalogging.h"
-
-/**
- * @brief Dev console sniffer data buffer
- */
-class WaveChart {
-public:
- WaveChart();
- void init();
- void addEvent3(const char *name, const char *msg);
- void reset();
- void publishIfFull();
- void publish();
- bool isFull();
- bool isStartedTooLongAgo();
-private:
- Logging logging;
- uint32_t counter;
- efitime_t startTimeNt;
- volatile int isInitialized;
-};
-
-void initWaveChart(WaveChart *chart);
-void showWaveChartHistogram(void);
-void setChartSize(int newSize);
-
-#endif /* EFI_ENGINE_SNIFFER */
-
-#endif /* WAVE_CHART_H_ */
+/**
+ * @file engine_sniffer.h
+ * @brief Dev console wave sniffer
+ *
+ * @date Jun 23, 2013
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#ifndef WAVE_CHART_H_
+#define WAVE_CHART_H_
+
+#include "global.h"
+
+#if EFI_ENGINE_SNIFFER || defined(__DOXYGEN__)
+#include "datalogging.h"
+
+/**
+ * @brief Dev console sniffer data buffer
+ */
+class WaveChart {
+public:
+ WaveChart();
+ void init();
+ void addEvent3(const char *name, const char *msg);
+ void reset();
+ void publishIfFull();
+ void publish();
+ bool isFull();
+ bool isStartedTooLongAgo();
+private:
+ Logging logging;
+ uint32_t counter;
+ efitime_t startTimeNt;
+ volatile int isInitialized;
+};
+
+void initWaveChart(WaveChart *chart);
+void showWaveChartHistogram(void);
+void setChartSize(int newSize);
+
+#endif /* EFI_ENGINE_SNIFFER */
+
+#endif /* WAVE_CHART_H_ */
diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp
index 00bf4094c6..117dada0e5 100644
--- a/firmware/hw_layer/adc_inputs.cpp
+++ b/firmware/hw_layer/adc_inputs.cpp
@@ -1,624 +1,624 @@
-/**
- * @file adc_inputs.cpp
- * @brief Low level ADC code
- *
- * We are using two ADC devices here.
- * Slow ADC group is used for IAT, CLT, AFR, VBATT etc - this one is currently sampled at 20Hz
- *
- * Fast ADC group is used for TPS, MAP, MAF HIP
- *
- * @date Jan 14, 2013
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#include "main.h"
-
-#if HAL_USE_ADC || defined(__DOXYGEN__)
-
-#include "engine.h"
-#include "adc_inputs.h"
-#include "AdcConfiguration.h"
-#include "mpu_util.h"
-
-#include "pin_repository.h"
-#include "engine_math.h"
-#include "board_test.h"
-#include "engine_controller.h"
-#include "maf.h"
-#include "biquad.h"
-
-/* Depth of the conversion buffer, channels are sampled X times each.*/
-#define ADC_BUF_DEPTH_SLOW 8
-#define ADC_BUF_DEPTH_FAST 4
-
-Biquad biq[ADC_MAX_CHANNELS_COUNT];
-
-static adc_channel_mode_e adcHwChannelEnabled[HW_MAX_ADC_INDEX];
-static const char * adcHwChannelUsage[HW_MAX_ADC_INDEX];
-
-AdcDevice::AdcDevice(ADCConversionGroup* hwConfig) {
- this->hwConfig = hwConfig;
- channelCount = 0;
- conversionCount = 0;
- errorsCount = 0;
-
- hwConfig->sqr1 = 0;
- hwConfig->sqr2 = 0;
- hwConfig->sqr3 = 0;
- memset(hardwareIndexByIndernalAdcIndex, 0, sizeof(hardwareIndexByIndernalAdcIndex));
- memset(internalAdcIndexByHardwareIndex, 0xFFFFFFFF, sizeof(internalAdcIndexByHardwareIndex));
-}
-
-// todo: migrate from hardware timer to software ADC conversion triggering
-// todo: I guess we would have to use ChibiOS timer and not our own timer because
-// todo: adcStartConversionI requires OS lock. currently slow ADC is 20Hz
-#define PWM_FREQ_SLOW 5000 /* PWM clock frequency. I wonder what does this setting mean? */
-#define PWM_PERIOD_SLOW 250 /* PWM period (in PWM ticks). */
-
-/**
- * 8000 RPM is 133Hz
- * If we want to sample MAP once per 5 degrees we need 133Hz * (360 / 5) = 9576Hz of fast ADC
- */
-// todo: migrate to continues ADC mode? probably not - we cannot afford the callback in
-// todo: continues mode. todo: look into our options
-#define PWM_FREQ_FAST 100000 /* PWM clock frequency. I wonder what does this setting mean? */
-#define PWM_PERIOD_FAST 10 /* PWM period (in PWM ticks). */
-
-// is there a reason to have this configurable?
-#define ADC_SLOW_DEVICE ADCD1
-
-// is there a reason to have this configurable?
-#define ADC_FAST_DEVICE ADCD2
-
-static int slowAdcCounter = 0;
-static LoggingWithStorage logger("ADC");
-
-// todo: move this flag to Engine god object
-static int adcDebugReporting = false;
-
-EXTERN_ENGINE;
-
-static adcsample_t getAvgAdcValue(int index, adcsample_t *samples, int bufDepth, int numChannels) {
- adcsample_t result = 0;
- for (int i = 0; i < bufDepth; i++) {
- result += samples[index];
- index += numChannels;
- }
- return result / bufDepth;
-}
-
-static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n);
-
-#define ADC_SAMPLING_SLOW ADC_SAMPLE_480
-#define ADC_SAMPLING_FAST ADC_SAMPLE_28
-/*
- * ADC conversion group.
- */
-static ADCConversionGroup adcgrpcfgSlow = { FALSE, 0, adc_callback_slow, NULL,
-/* HW dependent part.*/
-ADC_TwoSamplingDelay_20Cycles, // cr1
- ADC_CR2_SWSTART, // cr2
-
- ADC_SMPR1_SMP_AN10(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_AN11(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_AN12(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_AN13(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_AN14(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_AN15(ADC_SAMPLING_SLOW) |
- ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_144)
- , // sample times for channels 10...18
- ADC_SMPR2_SMP_AN0(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN1(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN2(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN3(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN4(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN5(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN6(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN7(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN8(ADC_SAMPLING_SLOW) |
- ADC_SMPR2_SMP_AN9(ADC_SAMPLING_SLOW)
-
- , // In this field must be specified the sample times for channels 0...9
-
- 0, // Conversion group sequence 13...16 + sequence length
- 0, // Conversion group sequence 7...12
- 0 // Conversion group sequence 1...6
- };
-
-AdcDevice slowAdc(&adcgrpcfgSlow);
-
-static ADCConversionGroup adcgrpcfg_fast = { FALSE, 0 /* num_channels */, adc_callback_fast, NULL,
-/* HW dependent part.*/
-ADC_TwoSamplingDelay_5Cycles, // cr1
- ADC_CR2_SWSTART, // cr2
-
- 0, // sample times for channels 10...18
- // todo: IS SOMETHING MISSING HERE?
- ADC_SMPR2_SMP_AN0(ADC_SAMPLING_FAST), // In this field must be specified the sample times for channels 0...9
-
- 0, // Conversion group sequence 13...16 + sequence length
-
- 0, // Conversion group sequence 7...12
- 0
-
-// Conversion group sequence 1...6
- };
-
-AdcDevice fastAdc(&adcgrpcfg_fast);
-
-void doSlowAdc(void) {
-
- efiAssertVoid(getRemainingStack(chThdSelf())> 32, "lwStAdcSlow");
-
-#if EFI_INTERNAL_ADC
-
- /* Starts an asynchronous ADC conversion operation, the conversion
- will be executed in parallel to the current PWM cycle and will
- terminate before the next PWM cycle.*/
- slowAdc.conversionCount++;
- chSysLockFromIsr()
- ;
- if (ADC_SLOW_DEVICE.state != ADC_READY &&
- ADC_SLOW_DEVICE.state != ADC_COMPLETE &&
- ADC_SLOW_DEVICE.state != ADC_ERROR) {
- // todo: why and when does this happen? firmwareError(OBD_PCM_Processor_Fault, "ADC slow not ready?");
- slowAdc.errorsCount++;
- chSysUnlockFromIsr()
- ;
- return;
- }
- adcStartConversionI(&ADC_SLOW_DEVICE, &adcgrpcfgSlow, slowAdc.samples, ADC_BUF_DEPTH_SLOW);
- chSysUnlockFromIsr()
- ;
-#endif
-}
-
-static void pwmpcb_slow(PWMDriver *pwmp) {
- (void) pwmp;
- doSlowAdc();
-}
-
-static void pwmpcb_fast(PWMDriver *pwmp) {
- efiAssertVoid(getRemainingStack(chThdSelf())> 32, "lwStAdcFast");
-#if EFI_INTERNAL_ADC
- (void) pwmp;
-
- /*
- * Starts an asynchronous ADC conversion operation, the conversion
- * will be executed in parallel to the current PWM cycle and will
- * terminate before the next PWM cycle.
- */
- chSysLockFromIsr()
- ;
- if (ADC_FAST_DEVICE.state != ADC_READY &&
- ADC_FAST_DEVICE.state != ADC_COMPLETE &&
- ADC_FAST_DEVICE.state != ADC_ERROR) {
- fastAdc.errorsCount++;
- // todo: when? why? firmwareError(OBD_PCM_Processor_Fault, "ADC fast not ready?");
- chSysUnlockFromIsr()
- ;
- return;
- }
- adcStartConversionI(&ADC_FAST_DEVICE, &adcgrpcfg_fast, fastAdc.samples, ADC_BUF_DEPTH_FAST);
- chSysUnlockFromIsr()
- ;
- fastAdc.conversionCount++;
-#endif
-}
-
-float getMCUInternalTemperature(void) {
- float TemperatureValue = adcToVolts(slowAdc.getAdcValueByHwChannel(ADC_CHANNEL_SENSOR));
- TemperatureValue -= 0.760; // Subtract the reference voltage at 25°C
- TemperatureValue /= .0025; // Divide by slope 2.5mV
-
- TemperatureValue += 25.0; // Add the 25°C
- return TemperatureValue;
-}
-
-int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) {
- if (hwChannel == EFI_ADC_NONE) {
- warning(CUSTOM_OBD_ANALOG_INPUT_ERROR, "ADC: %s input is not configured", msg);
- return -1;
- }
-#if EFI_ENABLE_MOCK_ADC || EFI_SIMULATOR
- if (engine->engineState.mockAdcState.hasMockAdc[hwChannel])
- return engine->engineState.mockAdcState.getMockAdcValue(hwChannel);
-
-#endif
-
-
- if (adcHwChannelEnabled[hwChannel] == ADC_FAST) {
- int internalIndex = fastAdc.internalAdcIndexByHardwareIndex[hwChannel];
-// todo if ADC_BUF_DEPTH_FAST EQ 1
-// return fastAdc.samples[internalIndex];
- int value = getAvgAdcValue(internalIndex, fastAdc.samples, ADC_BUF_DEPTH_FAST, fastAdc.size());
- return value;
- }
- if (adcHwChannelEnabled[hwChannel] != ADC_SLOW) {
- warning(CUSTOM_OBD_39, "ADC is off [%s] index=%d", msg, hwChannel);
- }
-
- return slowAdc.getAdcValueByHwChannel(hwChannel);
-}
-
-static PWMConfig pwmcfg_slow = { PWM_FREQ_SLOW, PWM_PERIOD_SLOW, pwmpcb_slow, { {
-PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL }, {
-PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL } },
-/* HW dependent part.*/
-0, 0 };
-
-static PWMConfig pwmcfg_fast = { PWM_FREQ_FAST, PWM_PERIOD_FAST, pwmpcb_fast, { {
-PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL }, {
-PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL } },
-/* HW dependent part.*/
-0, 0 };
-
-static void initAdcPin(ioportid_t port, int pin, const char *msg) {
- print("adc %s\r\n", msg);
- mySetPadMode("adc input", port, pin, PAL_MODE_INPUT_ANALOG);
-}
-
-adc_channel_e getAdcChannel(brain_pin_e pin) {
- switch (pin) {
- case GPIOA_0:
- return EFI_ADC_0;
- case GPIOA_1:
- return EFI_ADC_1;
- case GPIOA_2:
- return EFI_ADC_2;
- case GPIOA_3:
- return EFI_ADC_3;
- case GPIOA_4:
- return EFI_ADC_4;
- case GPIOA_5:
- return EFI_ADC_5;
- case GPIOA_6:
- return EFI_ADC_6;
- case GPIOA_7:
- return EFI_ADC_7;
- case GPIOB_0:
- return EFI_ADC_8;
- case GPIOB_1:
- return EFI_ADC_9;
- case GPIOC_0:
- return EFI_ADC_10;
- case GPIOC_1:
- return EFI_ADC_11;
- case GPIOC_2:
- return EFI_ADC_12;
- case GPIOC_3:
- return EFI_ADC_13;
- case GPIOC_4:
- return EFI_ADC_14;
- case GPIOC_5:
- return EFI_ADC_15;
- default:
- return EFI_ADC_ERROR;
- }
-}
-
-ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel) {
- // todo: replace this with an array :)
- switch (hwChannel) {
- case ADC_CHANNEL_IN0:
- return GPIOA;
- case ADC_CHANNEL_IN1:
- return GPIOA;
- case ADC_CHANNEL_IN2:
- return GPIOA;
- case ADC_CHANNEL_IN3:
- return GPIOA;
- case ADC_CHANNEL_IN4:
- return GPIOA;
- case ADC_CHANNEL_IN5:
- return GPIOA;
- case ADC_CHANNEL_IN6:
- return GPIOA;
- case ADC_CHANNEL_IN7:
- return GPIOA;
- case ADC_CHANNEL_IN8:
- return GPIOB;
- case ADC_CHANNEL_IN9:
- return GPIOB;
- case ADC_CHANNEL_IN10:
- return GPIOC;
- case ADC_CHANNEL_IN11:
- return GPIOC;
- case ADC_CHANNEL_IN12:
- return GPIOC;
- case ADC_CHANNEL_IN13:
- return GPIOC;
- case ADC_CHANNEL_IN14:
- return GPIOC;
- case ADC_CHANNEL_IN15:
- return GPIOC;
- default:
- firmwareError(CUSTOM_ERR_6516, "Unknown hw channel %d [%s]", hwChannel, msg);
- return NULL;
- }
-}
-
-const char * getAdcMode(adc_channel_e hwChannel) {
- if (slowAdc.isHwUsed(hwChannel)) {
- return "slow";
- }
- if (fastAdc.isHwUsed(hwChannel)) {
- return "fast";
- }
- return "INACTIVE - need restart";
-}
-
-int getAdcChannelPin(adc_channel_e hwChannel) {
- // todo: replace this with an array :)
- switch (hwChannel) {
- case ADC_CHANNEL_IN0:
- return 0;
- case ADC_CHANNEL_IN1:
- return 1;
- case ADC_CHANNEL_IN2:
- return 2;
- case ADC_CHANNEL_IN3:
- return 3;
- case ADC_CHANNEL_IN4:
- return 4;
- case ADC_CHANNEL_IN5:
- return 5;
- case ADC_CHANNEL_IN6:
- return 6;
- case ADC_CHANNEL_IN7:
- return 7;
- case ADC_CHANNEL_IN8:
- return 0;
- case ADC_CHANNEL_IN9:
- return 1;
- case ADC_CHANNEL_IN10:
- return 0;
- case ADC_CHANNEL_IN11:
- return 1;
- case ADC_CHANNEL_IN12:
- return 2;
- case ADC_CHANNEL_IN13:
- return 3;
- case ADC_CHANNEL_IN14:
- return 4;
- case ADC_CHANNEL_IN15:
- return 5;
- default:
- firmwareError(CUSTOM_ERR_6535, "Unknown hw channel %d", hwChannel);
- return -1;
- }
-}
-
-static void initAdcHwChannel(adc_channel_e hwChannel) {
- ioportid_t port = getAdcChannelPort("adc", hwChannel);
- int pin = getAdcChannelPin(hwChannel);
-
- initAdcPin(port, pin, "hw");
-}
-
-int AdcDevice::size() {
- return channelCount;
-}
-
-int AdcDevice::getAdcValueByHwChannel(int hwChannel) {
- int internalIndex = internalAdcIndexByHardwareIndex[hwChannel];
- return values.adc_data[internalIndex];
-}
-
-int AdcDevice::getAdcValueByIndex(int internalIndex) {
- return values.adc_data[internalIndex];
-}
-
-void AdcDevice::init(void) {
- hwConfig->num_channels = size();
- hwConfig->sqr1 += ADC_SQR1_NUM_CH(size());
-}
-
-bool AdcDevice::isHwUsed(adc_channel_e hwChannelIndex) {
- for (int i = 0; i < channelCount; i++) {
- if (hardwareIndexByIndernalAdcIndex[i] == hwChannelIndex) {
- return true;
- }
- }
- return false;
-}
-
-void AdcDevice::enableChannel(adc_channel_e hwChannel) {
- int logicChannel = channelCount++;
-
- internalAdcIndexByHardwareIndex[hwChannel] = logicChannel;
- hardwareIndexByIndernalAdcIndex[logicChannel] = hwChannel;
- if (logicChannel < 6) {
- hwConfig->sqr3 += (hwChannel) << (5 * logicChannel);
- } else if (logicChannel < 12) {
- hwConfig->sqr2 += (hwChannel) << (5 * (logicChannel - 6));
- } else {
- hwConfig->sqr1 += (hwChannel) << (5 * (logicChannel - 12));
- }
- // todo: support for more then 12 channels? not sure how needed it would be
-}
-
-void AdcDevice::enableChannelAndPin(adc_channel_e hwChannel) {
- enableChannel(hwChannel);
-
- initAdcHwChannel(hwChannel);
-}
-
-static void printAdcValue(adc_channel_e channel) {
- int value = getAdcValue("print", channel);
- float volts = adcToVoltsDivided(value);
- scheduleMsg(&logger, "adc voltage : %f", volts);
-}
-
-adc_channel_e AdcDevice::getAdcHardwareIndexByInternalIndex(int index) {
- return hardwareIndexByIndernalAdcIndex[index];
-}
-
-static void printFullAdcReport(Logging *logger) {
- scheduleMsg(logger, "fast %d slow %d", fastAdc.conversionCount, slowAdc.conversionCount);
-
- for (int index = 0; index < slowAdc.size(); index++) {
- appendMsgPrefix(logger);
-
- adc_channel_e hwIndex = slowAdc.getAdcHardwareIndexByInternalIndex(index);
- ioportid_t port = getAdcChannelPort("print", hwIndex);
- int pin = getAdcChannelPin(hwIndex);
-
- int adcValue = slowAdc.getAdcValueByIndex(index);
- appendPrintf(logger, " ch%d %s%d", index, portname(port), pin);
- appendPrintf(logger, " ADC%d 12bit=%d", hwIndex, adcValue);
- float volts = adcToVolts(adcValue);
- appendPrintf(logger, " v=%f", volts);
-
- appendMsgPostfix(logger);
- scheduleLogging(logger);
- }
-}
-
-static void setAdcDebugReporting(int value) {
- adcDebugReporting = value;
- scheduleMsg(&logger, "adcDebug=%d", adcDebugReporting);
-}
-
-static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
- (void) buffer;
- (void) n;
- efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#9c");
- /* Note, only in the ADC_COMPLETE state because the ADC driver fires
- * an intermediate callback when the buffer is half full. */
- if (adcp->state == ADC_COMPLETE) {
- /* Calculates the average values from the ADC samples.*/
- for (int i = 0; i < slowAdc.size(); i++) {
- int value = getAvgAdcValue(i, slowAdc.samples, ADC_BUF_DEPTH_SLOW, slowAdc.size());
- adcsample_t prev = slowAdc.values.adc_data[i];
- float result = (slowAdcCounter == 0) ? value :
- CONFIG(slowAdcAlpha) * value + (1 - CONFIG(slowAdcAlpha)) * prev;
-// if (slowAdcCounter == 0) {
-// biq[i].initValue(value);
-// }
-// float result = biq[i].getValue(value);
-
- slowAdc.values.adc_data[i] = (int)result;
- }
- slowAdcCounter++;
- }
-}
-
-static char errorMsgBuff[10];
-
-static void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode) {
- if (setting == EFI_ADC_NONE) {
- return;
- }
- if (adcHwChannelEnabled[setting] != ADC_OFF) {
- getPinNameByAdcChannel(name, setting, errorMsgBuff);
- firmwareError(CUSTOM_ERR_ADC_USED, "ADC mapping error: input %s for %s already used by %s?", errorMsgBuff, name, adcHwChannelUsage[setting]);
- }
-
- adcHwChannelUsage[setting] = name;
- adcHwChannelEnabled[setting] = mode;
-}
-
-static void configureInputs(void) {
- memset(adcHwChannelEnabled, 0, sizeof(adcHwChannelEnabled));
- memset(adcHwChannelUsage, 0, sizeof(adcHwChannelUsage));
-
- addChannel("MAP", engineConfiguration->map.sensor.hwChannel, ADC_FAST);
- if (hasMafSensor()) {
- addChannel("MAF", engineConfiguration->mafAdcChannel, ADC_FAST);
- }
- addChannel("hip", engineConfiguration->hipOutputChannel, ADC_FAST);
-
- addChannel("TPS", engineConfiguration->tpsAdcChannel, ADC_SLOW);
- addChannel("fuel", engineConfiguration->fuelLevelSensor, ADC_SLOW);
- addChannel("pPS", engineConfiguration->pedalPositionChannel, ADC_SLOW);
- addChannel("VBatt", engineConfiguration->vbattAdcChannel, ADC_SLOW);
- // not currently used addChannel("Vref", engineConfiguration->vRefAdcChannel, ADC_SLOW);
- addChannel("CLT", engineConfiguration->clt.adcChannel, ADC_SLOW);
- addChannel("IAT", engineConfiguration->iat.adcChannel, ADC_SLOW);
- addChannel("AFR", engineConfiguration->afr.hwChannel, ADC_SLOW);
- addChannel("AC", engineConfiguration->acSwitchAdc, ADC_SLOW);
-
- for (int i = 0; i < FSIO_ADC_COUNT ; i++) {
- addChannel("FSIOadc", engineConfiguration->fsioAdc[i], ADC_SLOW);
- }
-}
-
-void initAdcInputs(bool boardTestMode) {
- printMsg(&logger, "initAdcInputs()");
- if (ADC_BUF_DEPTH_FAST > MAX_ADC_GRP_BUF_DEPTH)
- firmwareError(CUSTOM_ERR_ADC_DEPTH_FAST, "ADC_BUF_DEPTH_FAST too high");
- if (ADC_BUF_DEPTH_SLOW > MAX_ADC_GRP_BUF_DEPTH)
- firmwareError(CUSTOM_ERR_ADC_DEPTH_SLOW, "ADC_BUF_DEPTH_SLOW too high");
-
- configureInputs();
-
- // migrate to 'enable adcdebug'
- addConsoleActionI("adcDebug", &setAdcDebugReporting);
-
-#if EFI_INTERNAL_ADC
- /*
- * Initializes the ADC driver.
- */
- adcStart(&ADC_SLOW_DEVICE, NULL);
- adcStart(&ADC_FAST_DEVICE, NULL);
- adcSTM32EnableTSVREFE(); // Internal temperature sensor
-
- for (int adc = 0; adc < HW_MAX_ADC_INDEX; adc++) {
- adc_channel_mode_e mode = adcHwChannelEnabled[adc];
-
- /**
- * in board test mode all currently enabled ADC channels are running in slow mode
- */
- if (mode == ADC_SLOW || (boardTestMode && mode == ADC_FAST)) {
- slowAdc.enableChannelAndPin((adc_channel_e) (ADC_CHANNEL_IN0 + adc));
- } else if (mode == ADC_FAST) {
- fastAdc.enableChannelAndPin((adc_channel_e) (ADC_CHANNEL_IN0 + adc));
- }
- }
-
- // Internal temperature sensor, Available on ADC1 only
- slowAdc.enableChannel((adc_channel_e)ADC_CHANNEL_SENSOR);
-
- slowAdc.init();
- pwmStart(EFI_INTERNAL_SLOW_ADC_PWM, &pwmcfg_slow);
- if (boardConfiguration->isFastAdcEnabled) {
- fastAdc.init();
- /*
- * Initializes the PWM driver.
- */
- pwmStart(EFI_INTERNAL_FAST_ADC_PWM, &pwmcfg_fast);
- }
-
- // ADC_CHANNEL_IN0 // PA0
- // ADC_CHANNEL_IN1 // PA1
- // ADC_CHANNEL_IN2 // PA2
- // ADC_CHANNEL_IN3 // PA3
- // ADC_CHANNEL_IN4 // PA4
- // ADC_CHANNEL_IN5 // PA5 - this is also TIM2_CH1
- // ADC_CHANNEL_IN6 // PA6
- // ADC_CHANNEL_IN7 // PA7
- // ADC_CHANNEL_IN8 // PB0
- // ADC_CHANNEL_IN9 // PB1
- // ADC_CHANNEL_IN10 // PC0
- // ADC_CHANNEL_IN11 // PC1
- // ADC_CHANNEL_IN12 // PC2
- // ADC_CHANNEL_IN13 // PC3
- // ADC_CHANNEL_IN14 // PC4
- // ADC_CHANNEL_IN15 // PC5
-
- //if(slowAdcChannelCount > ADC_MAX_SLOW_CHANNELS_COUNT) // todo: do we need this logic? do we need this check
-
- addConsoleActionI("adc", (VoidInt) printAdcValue);
-#else
- printMsg(&logger, "ADC disabled");
-#endif
-}
-
-void printFullAdcReportIfNeeded(Logging *logger) {
- if (!adcDebugReporting)
- return;
- printFullAdcReport(logger);
-}
-
-#endif /* HAL_USE_ADC */
+/**
+ * @file adc_inputs.cpp
+ * @brief Low level ADC code
+ *
+ * We are using two ADC devices here.
+ * Slow ADC group is used for IAT, CLT, AFR, VBATT etc - this one is currently sampled at 20Hz
+ *
+ * Fast ADC group is used for TPS, MAP, MAF HIP
+ *
+ * @date Jan 14, 2013
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#include "main.h"
+
+#if HAL_USE_ADC || defined(__DOXYGEN__)
+
+#include "engine.h"
+#include "adc_inputs.h"
+#include "AdcConfiguration.h"
+#include "mpu_util.h"
+
+#include "pin_repository.h"
+#include "engine_math.h"
+#include "board_test.h"
+#include "engine_controller.h"
+#include "maf.h"
+#include "biquad.h"
+
+/* Depth of the conversion buffer, channels are sampled X times each.*/
+#define ADC_BUF_DEPTH_SLOW 8
+#define ADC_BUF_DEPTH_FAST 4
+
+Biquad biq[ADC_MAX_CHANNELS_COUNT];
+
+static adc_channel_mode_e adcHwChannelEnabled[HW_MAX_ADC_INDEX];
+static const char * adcHwChannelUsage[HW_MAX_ADC_INDEX];
+
+AdcDevice::AdcDevice(ADCConversionGroup* hwConfig) {
+ this->hwConfig = hwConfig;
+ channelCount = 0;
+ conversionCount = 0;
+ errorsCount = 0;
+
+ hwConfig->sqr1 = 0;
+ hwConfig->sqr2 = 0;
+ hwConfig->sqr3 = 0;
+ memset(hardwareIndexByIndernalAdcIndex, 0, sizeof(hardwareIndexByIndernalAdcIndex));
+ memset(internalAdcIndexByHardwareIndex, 0xFFFFFFFF, sizeof(internalAdcIndexByHardwareIndex));
+}
+
+// todo: migrate from hardware timer to software ADC conversion triggering
+// todo: I guess we would have to use ChibiOS timer and not our own timer because
+// todo: adcStartConversionI requires OS lock. currently slow ADC is 20Hz
+#define PWM_FREQ_SLOW 5000 /* PWM clock frequency. I wonder what does this setting mean? */
+#define PWM_PERIOD_SLOW 250 /* PWM period (in PWM ticks). */
+
+/**
+ * 8000 RPM is 133Hz
+ * If we want to sample MAP once per 5 degrees we need 133Hz * (360 / 5) = 9576Hz of fast ADC
+ */
+// todo: migrate to continues ADC mode? probably not - we cannot afford the callback in
+// todo: continues mode. todo: look into our options
+#define PWM_FREQ_FAST 100000 /* PWM clock frequency. I wonder what does this setting mean? */
+#define PWM_PERIOD_FAST 10 /* PWM period (in PWM ticks). */
+
+// is there a reason to have this configurable?
+#define ADC_SLOW_DEVICE ADCD1
+
+// is there a reason to have this configurable?
+#define ADC_FAST_DEVICE ADCD2
+
+static int slowAdcCounter = 0;
+static LoggingWithStorage logger("ADC");
+
+// todo: move this flag to Engine god object
+static int adcDebugReporting = false;
+
+EXTERN_ENGINE;
+
+static adcsample_t getAvgAdcValue(int index, adcsample_t *samples, int bufDepth, int numChannels) {
+ adcsample_t result = 0;
+ for (int i = 0; i < bufDepth; i++) {
+ result += samples[index];
+ index += numChannels;
+ }
+ return result / bufDepth;
+}
+
+static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n);
+
+#define ADC_SAMPLING_SLOW ADC_SAMPLE_480
+#define ADC_SAMPLING_FAST ADC_SAMPLE_28
+/*
+ * ADC conversion group.
+ */
+static ADCConversionGroup adcgrpcfgSlow = { FALSE, 0, adc_callback_slow, NULL,
+/* HW dependent part.*/
+ADC_TwoSamplingDelay_20Cycles, // cr1
+ ADC_CR2_SWSTART, // cr2
+
+ ADC_SMPR1_SMP_AN10(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_AN11(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_AN12(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_AN13(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_AN14(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_AN15(ADC_SAMPLING_SLOW) |
+ ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_144)
+ , // sample times for channels 10...18
+ ADC_SMPR2_SMP_AN0(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN1(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN2(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN3(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN4(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN5(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN6(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN7(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN8(ADC_SAMPLING_SLOW) |
+ ADC_SMPR2_SMP_AN9(ADC_SAMPLING_SLOW)
+
+ , // In this field must be specified the sample times for channels 0...9
+
+ 0, // Conversion group sequence 13...16 + sequence length
+ 0, // Conversion group sequence 7...12
+ 0 // Conversion group sequence 1...6
+ };
+
+AdcDevice slowAdc(&adcgrpcfgSlow);
+
+static ADCConversionGroup adcgrpcfg_fast = { FALSE, 0 /* num_channels */, adc_callback_fast, NULL,
+/* HW dependent part.*/
+ADC_TwoSamplingDelay_5Cycles, // cr1
+ ADC_CR2_SWSTART, // cr2
+
+ 0, // sample times for channels 10...18
+ // todo: IS SOMETHING MISSING HERE?
+ ADC_SMPR2_SMP_AN0(ADC_SAMPLING_FAST), // In this field must be specified the sample times for channels 0...9
+
+ 0, // Conversion group sequence 13...16 + sequence length
+
+ 0, // Conversion group sequence 7...12
+ 0
+
+// Conversion group sequence 1...6
+ };
+
+AdcDevice fastAdc(&adcgrpcfg_fast);
+
+void doSlowAdc(void) {
+
+ efiAssertVoid(getRemainingStack(chThdSelf())> 32, "lwStAdcSlow");
+
+#if EFI_INTERNAL_ADC
+
+ /* Starts an asynchronous ADC conversion operation, the conversion
+ will be executed in parallel to the current PWM cycle and will
+ terminate before the next PWM cycle.*/
+ slowAdc.conversionCount++;
+ chSysLockFromIsr()
+ ;
+ if (ADC_SLOW_DEVICE.state != ADC_READY &&
+ ADC_SLOW_DEVICE.state != ADC_COMPLETE &&
+ ADC_SLOW_DEVICE.state != ADC_ERROR) {
+ // todo: why and when does this happen? firmwareError(OBD_PCM_Processor_Fault, "ADC slow not ready?");
+ slowAdc.errorsCount++;
+ chSysUnlockFromIsr()
+ ;
+ return;
+ }
+ adcStartConversionI(&ADC_SLOW_DEVICE, &adcgrpcfgSlow, slowAdc.samples, ADC_BUF_DEPTH_SLOW);
+ chSysUnlockFromIsr()
+ ;
+#endif
+}
+
+static void pwmpcb_slow(PWMDriver *pwmp) {
+ (void) pwmp;
+ doSlowAdc();
+}
+
+static void pwmpcb_fast(PWMDriver *pwmp) {
+ efiAssertVoid(getRemainingStack(chThdSelf())> 32, "lwStAdcFast");
+#if EFI_INTERNAL_ADC
+ (void) pwmp;
+
+ /*
+ * Starts an asynchronous ADC conversion operation, the conversion
+ * will be executed in parallel to the current PWM cycle and will
+ * terminate before the next PWM cycle.
+ */
+ chSysLockFromIsr()
+ ;
+ if (ADC_FAST_DEVICE.state != ADC_READY &&
+ ADC_FAST_DEVICE.state != ADC_COMPLETE &&
+ ADC_FAST_DEVICE.state != ADC_ERROR) {
+ fastAdc.errorsCount++;
+ // todo: when? why? firmwareError(OBD_PCM_Processor_Fault, "ADC fast not ready?");
+ chSysUnlockFromIsr()
+ ;
+ return;
+ }
+ adcStartConversionI(&ADC_FAST_DEVICE, &adcgrpcfg_fast, fastAdc.samples, ADC_BUF_DEPTH_FAST);
+ chSysUnlockFromIsr()
+ ;
+ fastAdc.conversionCount++;
+#endif
+}
+
+float getMCUInternalTemperature(void) {
+ float TemperatureValue = adcToVolts(slowAdc.getAdcValueByHwChannel(ADC_CHANNEL_SENSOR));
+ TemperatureValue -= 0.760; // Subtract the reference voltage at 25°C
+ TemperatureValue /= .0025; // Divide by slope 2.5mV
+
+ TemperatureValue += 25.0; // Add the 25°C
+ return TemperatureValue;
+}
+
+int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) {
+ if (hwChannel == EFI_ADC_NONE) {
+ warning(CUSTOM_OBD_ANALOG_INPUT_ERROR, "ADC: %s input is not configured", msg);
+ return -1;
+ }
+#if EFI_ENABLE_MOCK_ADC || EFI_SIMULATOR
+ if (engine->engineState.mockAdcState.hasMockAdc[hwChannel])
+ return engine->engineState.mockAdcState.getMockAdcValue(hwChannel);
+
+#endif
+
+
+ if (adcHwChannelEnabled[hwChannel] == ADC_FAST) {
+ int internalIndex = fastAdc.internalAdcIndexByHardwareIndex[hwChannel];
+// todo if ADC_BUF_DEPTH_FAST EQ 1
+// return fastAdc.samples[internalIndex];
+ int value = getAvgAdcValue(internalIndex, fastAdc.samples, ADC_BUF_DEPTH_FAST, fastAdc.size());
+ return value;
+ }
+ if (adcHwChannelEnabled[hwChannel] != ADC_SLOW) {
+ warning(CUSTOM_OBD_39, "ADC is off [%s] index=%d", msg, hwChannel);
+ }
+
+ return slowAdc.getAdcValueByHwChannel(hwChannel);
+}
+
+static PWMConfig pwmcfg_slow = { PWM_FREQ_SLOW, PWM_PERIOD_SLOW, pwmpcb_slow, { {
+PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL }, {
+PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL } },
+/* HW dependent part.*/
+0, 0 };
+
+static PWMConfig pwmcfg_fast = { PWM_FREQ_FAST, PWM_PERIOD_FAST, pwmpcb_fast, { {
+PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL }, {
+PWM_OUTPUT_DISABLED, NULL }, { PWM_OUTPUT_DISABLED, NULL } },
+/* HW dependent part.*/
+0, 0 };
+
+static void initAdcPin(ioportid_t port, int pin, const char *msg) {
+ print("adc %s\r\n", msg);
+ mySetPadMode("adc input", port, pin, PAL_MODE_INPUT_ANALOG);
+}
+
+adc_channel_e getAdcChannel(brain_pin_e pin) {
+ switch (pin) {
+ case GPIOA_0:
+ return EFI_ADC_0;
+ case GPIOA_1:
+ return EFI_ADC_1;
+ case GPIOA_2:
+ return EFI_ADC_2;
+ case GPIOA_3:
+ return EFI_ADC_3;
+ case GPIOA_4:
+ return EFI_ADC_4;
+ case GPIOA_5:
+ return EFI_ADC_5;
+ case GPIOA_6:
+ return EFI_ADC_6;
+ case GPIOA_7:
+ return EFI_ADC_7;
+ case GPIOB_0:
+ return EFI_ADC_8;
+ case GPIOB_1:
+ return EFI_ADC_9;
+ case GPIOC_0:
+ return EFI_ADC_10;
+ case GPIOC_1:
+ return EFI_ADC_11;
+ case GPIOC_2:
+ return EFI_ADC_12;
+ case GPIOC_3:
+ return EFI_ADC_13;
+ case GPIOC_4:
+ return EFI_ADC_14;
+ case GPIOC_5:
+ return EFI_ADC_15;
+ default:
+ return EFI_ADC_ERROR;
+ }
+}
+
+ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel) {
+ // todo: replace this with an array :)
+ switch (hwChannel) {
+ case ADC_CHANNEL_IN0:
+ return GPIOA;
+ case ADC_CHANNEL_IN1:
+ return GPIOA;
+ case ADC_CHANNEL_IN2:
+ return GPIOA;
+ case ADC_CHANNEL_IN3:
+ return GPIOA;
+ case ADC_CHANNEL_IN4:
+ return GPIOA;
+ case ADC_CHANNEL_IN5:
+ return GPIOA;
+ case ADC_CHANNEL_IN6:
+ return GPIOA;
+ case ADC_CHANNEL_IN7:
+ return GPIOA;
+ case ADC_CHANNEL_IN8:
+ return GPIOB;
+ case ADC_CHANNEL_IN9:
+ return GPIOB;
+ case ADC_CHANNEL_IN10:
+ return GPIOC;
+ case ADC_CHANNEL_IN11:
+ return GPIOC;
+ case ADC_CHANNEL_IN12:
+ return GPIOC;
+ case ADC_CHANNEL_IN13:
+ return GPIOC;
+ case ADC_CHANNEL_IN14:
+ return GPIOC;
+ case ADC_CHANNEL_IN15:
+ return GPIOC;
+ default:
+ firmwareError(CUSTOM_ERR_6516, "Unknown hw channel %d [%s]", hwChannel, msg);
+ return NULL;
+ }
+}
+
+const char * getAdcMode(adc_channel_e hwChannel) {
+ if (slowAdc.isHwUsed(hwChannel)) {
+ return "slow";
+ }
+ if (fastAdc.isHwUsed(hwChannel)) {
+ return "fast";
+ }
+ return "INACTIVE - need restart";
+}
+
+int getAdcChannelPin(adc_channel_e hwChannel) {
+ // todo: replace this with an array :)
+ switch (hwChannel) {
+ case ADC_CHANNEL_IN0:
+ return 0;
+ case ADC_CHANNEL_IN1:
+ return 1;
+ case ADC_CHANNEL_IN2:
+ return 2;
+ case ADC_CHANNEL_IN3:
+ return 3;
+ case ADC_CHANNEL_IN4:
+ return 4;
+ case ADC_CHANNEL_IN5:
+ return 5;
+ case ADC_CHANNEL_IN6:
+ return 6;
+ case ADC_CHANNEL_IN7:
+ return 7;
+ case ADC_CHANNEL_IN8:
+ return 0;
+ case ADC_CHANNEL_IN9:
+ return 1;
+ case ADC_CHANNEL_IN10:
+ return 0;
+ case ADC_CHANNEL_IN11:
+ return 1;
+ case ADC_CHANNEL_IN12:
+ return 2;
+ case ADC_CHANNEL_IN13:
+ return 3;
+ case ADC_CHANNEL_IN14:
+ return 4;
+ case ADC_CHANNEL_IN15:
+ return 5;
+ default:
+ firmwareError(CUSTOM_ERR_6535, "Unknown hw channel %d", hwChannel);
+ return -1;
+ }
+}
+
+static void initAdcHwChannel(adc_channel_e hwChannel) {
+ ioportid_t port = getAdcChannelPort("adc", hwChannel);
+ int pin = getAdcChannelPin(hwChannel);
+
+ initAdcPin(port, pin, "hw");
+}
+
+int AdcDevice::size() {
+ return channelCount;
+}
+
+int AdcDevice::getAdcValueByHwChannel(int hwChannel) {
+ int internalIndex = internalAdcIndexByHardwareIndex[hwChannel];
+ return values.adc_data[internalIndex];
+}
+
+int AdcDevice::getAdcValueByIndex(int internalIndex) {
+ return values.adc_data[internalIndex];
+}
+
+void AdcDevice::init(void) {
+ hwConfig->num_channels = size();
+ hwConfig->sqr1 += ADC_SQR1_NUM_CH(size());
+}
+
+bool AdcDevice::isHwUsed(adc_channel_e hwChannelIndex) {
+ for (int i = 0; i < channelCount; i++) {
+ if (hardwareIndexByIndernalAdcIndex[i] == hwChannelIndex) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void AdcDevice::enableChannel(adc_channel_e hwChannel) {
+ int logicChannel = channelCount++;
+
+ internalAdcIndexByHardwareIndex[hwChannel] = logicChannel;
+ hardwareIndexByIndernalAdcIndex[logicChannel] = hwChannel;
+ if (logicChannel < 6) {
+ hwConfig->sqr3 += (hwChannel) << (5 * logicChannel);
+ } else if (logicChannel < 12) {
+ hwConfig->sqr2 += (hwChannel) << (5 * (logicChannel - 6));
+ } else {
+ hwConfig->sqr1 += (hwChannel) << (5 * (logicChannel - 12));
+ }
+ // todo: support for more then 12 channels? not sure how needed it would be
+}
+
+void AdcDevice::enableChannelAndPin(adc_channel_e hwChannel) {
+ enableChannel(hwChannel);
+
+ initAdcHwChannel(hwChannel);
+}
+
+static void printAdcValue(adc_channel_e channel) {
+ int value = getAdcValue("print", channel);
+ float volts = adcToVoltsDivided(value);
+ scheduleMsg(&logger, "adc voltage : %f", volts);
+}
+
+adc_channel_e AdcDevice::getAdcHardwareIndexByInternalIndex(int index) {
+ return hardwareIndexByIndernalAdcIndex[index];
+}
+
+static void printFullAdcReport(Logging *logger) {
+ scheduleMsg(logger, "fast %d slow %d", fastAdc.conversionCount, slowAdc.conversionCount);
+
+ for (int index = 0; index < slowAdc.size(); index++) {
+ appendMsgPrefix(logger);
+
+ adc_channel_e hwIndex = slowAdc.getAdcHardwareIndexByInternalIndex(index);
+ ioportid_t port = getAdcChannelPort("print", hwIndex);
+ int pin = getAdcChannelPin(hwIndex);
+
+ int adcValue = slowAdc.getAdcValueByIndex(index);
+ appendPrintf(logger, " ch%d %s%d", index, portname(port), pin);
+ appendPrintf(logger, " ADC%d 12bit=%d", hwIndex, adcValue);
+ float volts = adcToVolts(adcValue);
+ appendPrintf(logger, " v=%f", volts);
+
+ appendMsgPostfix(logger);
+ scheduleLogging(logger);
+ }
+}
+
+static void setAdcDebugReporting(int value) {
+ adcDebugReporting = value;
+ scheduleMsg(&logger, "adcDebug=%d", adcDebugReporting);
+}
+
+static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
+ (void) buffer;
+ (void) n;
+ efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#9c");
+ /* Note, only in the ADC_COMPLETE state because the ADC driver fires
+ * an intermediate callback when the buffer is half full. */
+ if (adcp->state == ADC_COMPLETE) {
+ /* Calculates the average values from the ADC samples.*/
+ for (int i = 0; i < slowAdc.size(); i++) {
+ int value = getAvgAdcValue(i, slowAdc.samples, ADC_BUF_DEPTH_SLOW, slowAdc.size());
+ adcsample_t prev = slowAdc.values.adc_data[i];
+ float result = (slowAdcCounter == 0) ? value :
+ CONFIG(slowAdcAlpha) * value + (1 - CONFIG(slowAdcAlpha)) * prev;
+// if (slowAdcCounter == 0) {
+// biq[i].initValue(value);
+// }
+// float result = biq[i].getValue(value);
+
+ slowAdc.values.adc_data[i] = (int)result;
+ }
+ slowAdcCounter++;
+ }
+}
+
+static char errorMsgBuff[10];
+
+static void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode) {
+ if (setting == EFI_ADC_NONE) {
+ return;
+ }
+ if (adcHwChannelEnabled[setting] != ADC_OFF) {
+ getPinNameByAdcChannel(name, setting, errorMsgBuff);
+ firmwareError(CUSTOM_ERR_ADC_USED, "ADC mapping error: input %s for %s already used by %s?", errorMsgBuff, name, adcHwChannelUsage[setting]);
+ }
+
+ adcHwChannelUsage[setting] = name;
+ adcHwChannelEnabled[setting] = mode;
+}
+
+static void configureInputs(void) {
+ memset(adcHwChannelEnabled, 0, sizeof(adcHwChannelEnabled));
+ memset(adcHwChannelUsage, 0, sizeof(adcHwChannelUsage));
+
+ addChannel("MAP", engineConfiguration->map.sensor.hwChannel, ADC_FAST);
+ if (hasMafSensor()) {
+ addChannel("MAF", engineConfiguration->mafAdcChannel, ADC_FAST);
+ }
+ addChannel("hip", engineConfiguration->hipOutputChannel, ADC_FAST);
+
+ addChannel("TPS", engineConfiguration->tpsAdcChannel, ADC_SLOW);
+ addChannel("fuel", engineConfiguration->fuelLevelSensor, ADC_SLOW);
+ addChannel("pPS", engineConfiguration->pedalPositionChannel, ADC_SLOW);
+ addChannel("VBatt", engineConfiguration->vbattAdcChannel, ADC_SLOW);
+ // not currently used addChannel("Vref", engineConfiguration->vRefAdcChannel, ADC_SLOW);
+ addChannel("CLT", engineConfiguration->clt.adcChannel, ADC_SLOW);
+ addChannel("IAT", engineConfiguration->iat.adcChannel, ADC_SLOW);
+ addChannel("AFR", engineConfiguration->afr.hwChannel, ADC_SLOW);
+ addChannel("AC", engineConfiguration->acSwitchAdc, ADC_SLOW);
+
+ for (int i = 0; i < FSIO_ADC_COUNT ; i++) {
+ addChannel("FSIOadc", engineConfiguration->fsioAdc[i], ADC_SLOW);
+ }
+}
+
+void initAdcInputs(bool boardTestMode) {
+ printMsg(&logger, "initAdcInputs()");
+ if (ADC_BUF_DEPTH_FAST > MAX_ADC_GRP_BUF_DEPTH)
+ firmwareError(CUSTOM_ERR_ADC_DEPTH_FAST, "ADC_BUF_DEPTH_FAST too high");
+ if (ADC_BUF_DEPTH_SLOW > MAX_ADC_GRP_BUF_DEPTH)
+ firmwareError(CUSTOM_ERR_ADC_DEPTH_SLOW, "ADC_BUF_DEPTH_SLOW too high");
+
+ configureInputs();
+
+ // migrate to 'enable adcdebug'
+ addConsoleActionI("adcDebug", &setAdcDebugReporting);
+
+#if EFI_INTERNAL_ADC
+ /*
+ * Initializes the ADC driver.
+ */
+ adcStart(&ADC_SLOW_DEVICE, NULL);
+ adcStart(&ADC_FAST_DEVICE, NULL);
+ adcSTM32EnableTSVREFE(); // Internal temperature sensor
+
+ for (int adc = 0; adc < HW_MAX_ADC_INDEX; adc++) {
+ adc_channel_mode_e mode = adcHwChannelEnabled[adc];
+
+ /**
+ * in board test mode all currently enabled ADC channels are running in slow mode
+ */
+ if (mode == ADC_SLOW || (boardTestMode && mode == ADC_FAST)) {
+ slowAdc.enableChannelAndPin((adc_channel_e) (ADC_CHANNEL_IN0 + adc));
+ } else if (mode == ADC_FAST) {
+ fastAdc.enableChannelAndPin((adc_channel_e) (ADC_CHANNEL_IN0 + adc));
+ }
+ }
+
+ // Internal temperature sensor, Available on ADC1 only
+ slowAdc.enableChannel((adc_channel_e)ADC_CHANNEL_SENSOR);
+
+ slowAdc.init();
+ pwmStart(EFI_INTERNAL_SLOW_ADC_PWM, &pwmcfg_slow);
+ if (boardConfiguration->isFastAdcEnabled) {
+ fastAdc.init();
+ /*
+ * Initializes the PWM driver.
+ */
+ pwmStart(EFI_INTERNAL_FAST_ADC_PWM, &pwmcfg_fast);
+ }
+
+ // ADC_CHANNEL_IN0 // PA0
+ // ADC_CHANNEL_IN1 // PA1
+ // ADC_CHANNEL_IN2 // PA2
+ // ADC_CHANNEL_IN3 // PA3
+ // ADC_CHANNEL_IN4 // PA4
+ // ADC_CHANNEL_IN5 // PA5 - this is also TIM2_CH1
+ // ADC_CHANNEL_IN6 // PA6
+ // ADC_CHANNEL_IN7 // PA7
+ // ADC_CHANNEL_IN8 // PB0
+ // ADC_CHANNEL_IN9 // PB1
+ // ADC_CHANNEL_IN10 // PC0
+ // ADC_CHANNEL_IN11 // PC1
+ // ADC_CHANNEL_IN12 // PC2
+ // ADC_CHANNEL_IN13 // PC3
+ // ADC_CHANNEL_IN14 // PC4
+ // ADC_CHANNEL_IN15 // PC5
+
+ //if(slowAdcChannelCount > ADC_MAX_SLOW_CHANNELS_COUNT) // todo: do we need this logic? do we need this check
+
+ addConsoleActionI("adc", (VoidInt) printAdcValue);
+#else
+ printMsg(&logger, "ADC disabled");
+#endif
+}
+
+void printFullAdcReportIfNeeded(Logging *logger) {
+ if (!adcDebugReporting)
+ return;
+ printFullAdcReport(logger);
+}
+
+#endif /* HAL_USE_ADC */
diff --git a/firmware/hw_layer/lcd/lcd_HD44780.h b/firmware/hw_layer/lcd/lcd_HD44780.h
index 78ffcbb4fc..b413df75ea 100644
--- a/firmware/hw_layer/lcd/lcd_HD44780.h
+++ b/firmware/hw_layer/lcd/lcd_HD44780.h
@@ -1,29 +1,29 @@
-/**
- * @file lcd_HD44780.h
- *
- * @date 13.12.2013
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#ifndef LCD_HD44780_H_
-#define LCD_HD44780_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-void lcd_HD44780_init(Logging *sharedLogger);
-void lcd_HD44780_set_position(uint8_t row, uint8_t column);
-void lcd_HD44780_print_char(char data);
-void lcd_HD44780_print_string(const char *string);
-int getCurrentHD44780row(void);
-int getCurrentHD44780column(void);
-
-void lcdShowFatalMessage(char *message);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* LCD_HD44780_H_ */
+/**
+ * @file lcd_HD44780.h
+ *
+ * @date 13.12.2013
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#ifndef LCD_HD44780_H_
+#define LCD_HD44780_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+void lcd_HD44780_init(Logging *sharedLogger);
+void lcd_HD44780_set_position(uint8_t row, uint8_t column);
+void lcd_HD44780_print_char(char data);
+void lcd_HD44780_print_string(const char *string);
+int getCurrentHD44780row(void);
+int getCurrentHD44780column(void);
+
+void lcdShowFatalMessage(char *message);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LCD_HD44780_H_ */
diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini
index a095d1b421..9caa2f41f0 100644
--- a/firmware/tunerstudio/rusefi.ini
+++ b/firmware/tunerstudio/rusefi.ini
@@ -1,2367 +1,2367 @@
-; this is TunerStudio project for www.rusefi.com DIY engine management system
-
-; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly.
-enable2ndByteCanID = false
-
-#unset tuneByMAF
-
-[TunerStudio]
- queryCommand = "S"
- signature = "MShift v0.02" ; signature is expected to be 7 or more characters.
-
-[Constants]
-; new packet serial format with CRC
- messageEnvelopeFormat = msEnvelope_1.0
-
- endianness = little
- nPages = 1
-
-
- pageIdentifier = "\x00\x00"
- pageReadCommand = "R\x00\x00%2o%2c"
- burnCommand = "B\x00\x00"
- pageActivate = "P\x00\x00"
- pageValueWrite = "W\x00\x00%2o%v"
- pageChunkWrite = "C\x00\x00%2o%2c%v"
-; crc32CheckCommand = "k%2i%2o\xB8\x36"
- crc32CheckCommand = "k\x00\x00\x00\x00\x36\xB8"
-
-;communication settings
- pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/
-;e.g. put writeblocks off and add an interwrite delay
- writeBlocks = on
- interWriteDelay = 10
- blockReadTimeout = 3000; Milliseconds general timeout
-
- blockingFactor = 400 ; max chunk size
-;end communication settings
-
- ; name = bits, type, offset, bits
- ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
- ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
-
-; see PAGE_0_SIZE in C source code
-; CONFIG_DEFINITION_START
-; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 12 16:30:23 EDT 2017
-
-pageSize = 16376
-page = 1
- engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB"
- engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0
- injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 1000, 2
-;skipping injector_unusedlag offset 12
- injector_battLagCorrBins = array, F32, 16, [8], "V", 1, 0, 0.0, 20.0, 2
- injector_battLagCorr = array, F32, 48, [8], "ms/V", 1, 0, 0.0, 50.0, 2
- directSelfStimulation = bits, U32, 80, [0:0], "false", "true"
- activateAuxPid1 = bits, U32, 80, [1:1], "false", "true"
- isVerboseAuxPid1 = bits, U32, 80, [2:2], "false", "true"
- activateAuxPid2 = bits, U32, 80, [3:3], "false", "true"
- isVerboseAuxPid2 = bits, U32, 80, [4:4], "false", "true"
- activateAuxPid3 = bits, U32, 80, [5:5], "false", "true"
- isVerboseAuxPid3 = bits, U32, 80, [6:6], "false", "true"
- activateAuxPid4 = bits, U32, 80, [7:7], "false", "true"
- isVerboseAuxPid4 = bits, U32, 80, [8:8], "false", "true"
- useBiQuadAnalogFiltering= bits, U32, 80, [9:9], "false", "true"
- issue_294_10 = bits, U32, 80, [10:10], "false", "true"
- issue_294_11 = bits, U32, 80, [11:11], "false", "true"
- issue_294_12 = bits, U32, 80, [12:12], "false", "true"
- issue_294_13 = bits, U32, 80, [13:13], "false", "true"
- issue_294_14 = bits, U32, 80, [14:14], "false", "true"
- issue_294_15 = bits, U32, 80, [15:15], "false", "true"
- issue_294_16 = bits, U32, 80, [16:16], "false", "true"
- issue_294_17 = bits, U32, 80, [17:17], "false", "true"
- issue_294_18 = bits, U32, 80, [18:18], "false", "true"
- issue_294_19 = bits, U32, 80, [19:19], "false", "true"
- issue_294_21 = bits, U32, 80, [20:20], "false", "true"
- issue_294_22 = bits, U32, 80, [21:21], "false", "true"
- issue_294_23 = bits, U32, 80, [22:22], "false", "true"
- issue_294_24 = bits, U32, 80, [23:23], "false", "true"
- issue_294_25 = bits, U32, 80, [24:24], "false", "true"
- issue_294_26 = bits, U32, 80, [25:25], "false", "true"
- issue_294_27 = bits, U32, 80, [26:26], "false", "true"
- issue_294_28 = bits, U32, 80, [27:27], "false", "true"
- issue_294_29 = bits, U32, 80, [28:28], "false", "true"
- tpsMin = scalar, S16, 84, "ADC", 1, 0, 0, 1023, 0
- tpsMax = scalar, S16, 86, "ADC", 1, 0, 0, 1023, 0
- tpsErrorDetectionTooLow = scalar, S16, 88, "%", 1, 0, -40, 200, 0
- tpsErrorDetectionTooHigh = scalar, S16, 90, "%", 1, 0, -40, 200, 0
- cranking_baseFuel = scalar, F32, 92, "ms", 1, 0, 0, 200, 1
- cranking_rpm = scalar, S16, 96, "RPM", 1, 0, 0, 3000, 0
-;skipping cranking_alignmentFill offset 98
- primingSquirtDurationMs = scalar, F32, 100, "*C", 1, 0, -40, 200, 1
- ignitionDwellForCrankingMs = scalar, F32, 104, "ms", 1, 0, 0, 200, 1
- crankingChargeAngle = scalar, F32, 108, "deg", 1, 0, 0, 3000.0, 0
- map_samplingAngleBins = array, F32, 112, [8], "RPM", 1, 0, 0.0, 18000, 2
- map_samplingAngle = array, F32, 144, [8], "deg", 1, 0, 0.0, 90, 2
- map_samplingWindowBins = array, F32, 176, [8], "RPM", 1, 0, 0.0, 18000, 2
- map_samplingWindow = array, F32, 208, [8], "deg", 1, 0, 0.0, 90, 2
- map_sensor_lowValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2
- map_sensor_highValue = scalar, F32, 244, "kpa", 1, 0, -400, 800, 2
- map_sensor_type = bits, U32, 248, [0:2] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "INVALID"
- map_sensor_hwChannel = bits, U32, 252, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- clt_tempC_1 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1
- clt_tempC_2 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1
- clt_tempC_3 = scalar, F32, 264, "*C", 1, 0, -40, 200, 1
- clt_resistance_1 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1
- clt_resistance_2 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1
- clt_resistance_3 = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1
- clt_bias_resistor = scalar, F32, 280, "Ohm", 1, 0, 0, 200000, 1
- clt_adcChannel = bits, U32, 284, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- iat_tempC_1 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1
- iat_tempC_2 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1
- iat_tempC_3 = scalar, F32, 296, "*C", 1, 0, -40, 200, 1
- iat_resistance_1 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1
- iat_resistance_2 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1
- iat_resistance_3 = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1
- iat_bias_resistor = scalar, F32, 312, "Ohm", 1, 0, 0, 200000, 1
- iat_adcChannel = bits, U32, 316, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- step1rpm = scalar, S32, 320, "rpm", 1, 0, 0, 20000.0, 2
- step1timing = scalar, S32, 324, "deg", 1, 0, -180, 180, 2
- hip9011PrescalerAndSDO = scalar, S32, 328, "integer", 1, 0.0, 0.0, 32, 0
- knockBandCustom = scalar, F32, 332, "kHz", 1, 0.0, 0.0, 10.0, 2
- sparkDwellRpmBins = array, F32, 336, [8], "RPM", 1, 0.0, 0.0, 18000, 2
- sparkDwellValues = array, F32, 368, [8], "ms", 1, 0.0, 0.0, 30.0, 2
- displacement = scalar, F32, 400, "L", 1, 0, 0, 1000.0, 2
- cylindersCount = bits, U32, 404, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID"
- firingOrder = bits, U32, 408, [0:4], "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", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "fo16", "fo17", "INVALID"
- cylinderBore = scalar, F32, 412, "mm", 1, 0, 0, 20000.0, 2
- sensorSnifferRpmThreshold = scalar, S32, 416, "RPM", 1, 0, 0,30000, 0
- rpmHardLimit = scalar, S32, 420, "rpm", 1, 0, 0, 20000.0, 2
- fuelAlgorithm = bits, U32, 424, [0:1], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY"
- crankingInjectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "INVALID"
- injectionMode = bits, U32, 432, [0:1], "Simultaneous", "Sequential", "Batch", "INVALID"
- extraInjectionOffset = scalar, F32, 436, "deg", 1, 0.0, -720, 720, 2
- crankingTimingAngle = scalar, F32, 440, "deg", 1, 0.0, -360, 360, 2
- ignitionMode = bits, U32, 444, [0:1], "One coil", "Individual Coils", "Wasted", "INVALID"
- ignitionOffset = scalar, F32, 448, "RPM", 1, 0, 0, 3000.0, 0
- timingMode = bits, U32, 452 [0:0], "dynamic", "fixed"
- fixedModeTiming = scalar, F32, 456, "RPM", 1, 0, 0, 3000.0, 0
- globalTriggerAngleOffset = scalar, F32, 460, "deg", 1, 0, -720, 720, 0
- analogInputDividerCoefficient = scalar, F32, 464, "coef", 1, 0, 0.01, 10.0, 2
- vbattDividerCoeff = scalar, F32, 468, "coef", 1, 0, 0.01, 99.0, 2
- vbattAdcChannel = bits, U32, 472, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fanOnTemperature = scalar, F32, 476, "*C", 1, 0, 0, 1000.0, 2
- fanOffTemperature = scalar, F32, 480, "*C", 1, 0, 0, 1000.0, 2
- fuelLevelSensor = bits, U32, 484, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- vehicleSpeedCoef = scalar, F32, 488, "coef", 1, 0, 0.01, 2000.0, 2
- canNbcType = bits, U32, 492, [0:1], "BMW", "FIAT", "VAG" , "MAZDA RX8"
- canSleepPeriod = scalar, S32, 496, "ms", 1, 0, 0, 1000.0, 2
- operationMode = bits, U32, 500, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank", "INVALID", "INVALID", "INVALID"
- displayMode = bits, U32, 504, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID"
- logFormat = bits, U32, 508, [0:0], "native", "Mega Log Viewer"
- byFirmwareVersion = scalar, S32, 512, "index", 1, 0, 0, 300, 0
- HD44780width = scalar, S32, 516, "index", 1, 0, 0, 300, 0
- HD44780height = scalar, S32, 520, "index", 1, 0, 0, 300, 0
- tpsAdcChannel = bits, U32, 524, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
-;skipping overrideCrankingIgnition offset 528
- sensorChartFrequency = scalar, S32, 532, "index", 1, 0, 0, 300, 0 ; size 4
- trigger_type = bits, U32, 536, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "trg39", "trg40", "trg41", "trg42", "INVALID"
- trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 540, [0:0], "false", "true"
- trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 540, [1:1], "false", "true"
- trigger_useOnlyFirstChannel= bits, U32, 540, [2:2], "false", "true"
- trigger_customTotalToothCount = scalar, S32, 544, "number", 1, 0.0, 0, 500.0, 0
- trigger_customSkippedToothCount = scalar, S32, 548, "number", 1, 0.0, 0, 500.0, 0
- trigger_unusedcustomSyncRatioFrom = scalar, F32, 552, "number", 1, 0.0, 0, 1000.0, 4
- trigger_unusedcustomSyncRatioTo = scalar, F32, 556, "number", 1, 0.0, 0, 1000.0, 4
- trigger_unusedcustomUseRiseEdge = bits, U32, 560, [0:0], "false", "true"
- hip9011SpiDevice = bits,U32, 564, [0:1], "Off", "SPI1", "SPI2", "SPI3"
- globalFuelCorrection = scalar, F32, 568, "coef", 1, 0.0, 0, 1000.0, 2
- pedalPositionMin = scalar, S16, 572, "ADC", 1, 0, 0, 1023, 0
- pedalPositionMax = scalar, S16, 574, "ADC", 1, 0, 0, 1023, 0
-;skipping maxKnockSubDeg offset 576
- mafAdcChannel = bits, U32, 580, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- afr_hwChannel = bits, U32, 584, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- afr_v1 = scalar, F32, 588, "volts", 1, 0.0, 0, 10.0, 2
- afr_value1 = scalar, F32, 592, "AFR", 1, 0.0, 0, 1000.0, 2
- afr_v2 = scalar, F32, 596, "volts", 1, 0.0, 0, 10.0, 2
- afr_value2 = scalar, F32, 600, "AFR", 1, 0.0, 0, 1000.0, 2
- pedalPositionChannel = bits, U32, 604, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- baroSensor_lowValue = scalar, F32, 608, "kpa", 1, 0, -400, 800, 2
- baroSensor_highValue = scalar, F32, 612, "kpa", 1, 0, -400, 800, 2
- baroSensor_type = bits, U32, 616, [0:2] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "INVALID"
- baroSensor_hwChannel = bits, U32, 620, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- idle_solenoidPin = bits, U32, 624, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- idle_solenoidPinMode = bits, U32, 628, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- idle_solenoidFrequency = scalar, S32, 632, "Hz", 1, 0, 0, 3000, 0
- idle_stepperDirectionPin = bits, U32, 636, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- idle_stepperStepPin = bits, U32, 640, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- manIdlePosition = scalar, F32, 644, "%", 1, 0, 0, 100, 0
- fuelPumpPin = bits, U32, 648, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fuelPumpPinMode = bits, U32, 652, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- injectionPins1 = bits, U32, 656, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins2 = bits, U32, 660, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins3 = bits, U32, 664, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins4 = bits, U32, 668, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins5 = bits, U32, 672, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins6 = bits, U32, 676, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins7 = bits, U32, 680, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins8 = bits, U32, 684, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins9 = bits, U32, 688, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins10 = bits, U32, 692, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins11 = bits, U32, 696, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPins12 = bits, U32, 700, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- injectionPinMode = bits, U32, 704, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- ignitionPins1 = bits, U32, 708, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins2 = bits, U32, 712, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins3 = bits, U32, 716, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins4 = bits, U32, 720, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins5 = bits, U32, 724, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins6 = bits, U32, 728, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins7 = bits, U32, 732, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins8 = bits, U32, 736, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins9 = bits, U32, 740, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins10 = bits, U32, 744, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins11 = bits, U32, 748, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPins12 = bits, U32, 752, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- ignitionPinMode = bits, U32, 756, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- malfunctionIndicatorPin = bits, U32, 760, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- malfunctionIndicatorPinMode = bits, U32, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- fanPin = bits, U32, 768, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fanPinMode = bits, U32, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- mapFrequency0Kpa = scalar, F32, 776, "Hz", 1, 0, 0, 100000, 2
- mapFrequency100Kpa = scalar, F32, 780, "Hz", 1, 0, 0, 100000, 2
- clutchDownPin = bits, U32, 784, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- clutchDownPinMode = scalar, F32, 788, "ms", 1, 0, 0, 200, 1
- alternatorControlPin = bits, U32, 792, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- alternatorControlPinMode = bits, U32, 796, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- HD44780_rs = bits, U32, 800, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- HD44780_e = bits, U32, 804, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- HD44780_db4 = bits, U32, 808, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- HD44780_db5 = bits, U32, 812, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- HD44780_db6 = bits, U32, 816, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- HD44780_db7 = bits, U32, 820, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- gps_rx_pin = bits, U32, 824, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- gps_tx_pin = bits, U32, 828, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerSimulatorFrequency = scalar, S32, 832, "Rpm", 1, 0, 0,30000, 0
- digitalPotentiometerSpiDevice = bits,U32, 836, [0:1], "Off", "SPI1", "SPI2", "SPI3"
- digitalPotentiometerChipSelect1 = bits, U32, 840, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- digitalPotentiometerChipSelect2 = bits, U32, 844, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- digitalPotentiometerChipSelect3 = bits, U32, 848, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- digitalPotentiometerChipSelect4 = bits, U32, 852, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- etbDirectionPin1 = bits, U32, 856, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- etbDirectionPin2 = bits, U32, 860, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- etbControlPin1 = bits, U32, 864, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- etbControlPin2 = bits, U32, 868, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- electronicThrottlePin1Mode = bits, U32, 872, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- wboHeaterPin = bits, U32, 876, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- cj125CsPin = bits, U32, 880, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fuelLevelEmptyTankVoltage = scalar, F32, 884, "V", 1, 0, 0,10, 2
- fuelLevelFullTankVoltage = scalar, F32, 888, "V", 1, 0, 0,10, 2
- afr_type = bits, S32, 892, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX"
-;skipping etbDT offset 896
- hip9011CsPinMode = bits, U32, 900, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- tachOutputPin = bits, U32, 904, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- tachOutputPinMode = bits, U32, 908, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- triggerInputPins1 = bits, U32, 912, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- triggerInputPins2 = bits, U32, 916, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- triggerInputPins3 = bits, U32, 920, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- mainRelayPin = bits, U32, 924, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
-;skipping idleThreadPeriod offset 928
-;skipping consoleLoopPeriod offset 932
-;skipping lcdThreadPeriod offset 936
- sdCardCsPin = bits, U32, 940, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
-;skipping generalPeriodicThreadPeriod offset 944
- tunerStudioSerialSpeed = scalar, U32, 948, "BPs", 1, 0, 0,1000000, 0
- boardTestModeJumperPin = bits, U32, 952, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
-;skipping canDeviceMode offset 956
- canTxPin = bits, U32, 960, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- canRxPin = bits, U32, 964, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerSimulatorPins1 = bits, U32, 968, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerSimulatorPins2 = bits, U32, 972, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerSimulatorPins3 = bits, U32, 976, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerSimulatorPinModes1 = bits, U32, 980, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- triggerSimulatorPinModes2 = bits, U32, 984, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- triggerSimulatorPinModes3 = bits, U32, 988, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- o2heaterPin = bits, U32, 992, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- o2heaterPinModeTodO = bits, U32, 996, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- is_enabled_spi_1 = bits, U32, 1000, [0:0], "false", "true"
- is_enabled_spi_2 = bits, U32, 1000, [1:1], "false", "true"
- is_enabled_spi_3 = bits, U32, 1000, [2:2], "false", "true"
- isSdCardEnabled = bits, U32, 1000, [3:3], "false", "true"
- isFastAdcEnabled = bits, U32, 1000, [4:4], "false", "true"
- isEngineControlEnabled = bits, U32, 1000, [5:5], "false", "true"
- isHip9011Enabled = bits, U32, 1000, [6:6], "false", "true"
- isVerboseAlternator = bits, U32, 1000, [7:7], "false", "true"
- useSerialPort = bits, U32, 1000, [8:8], "false", "true"
- useStepperIdle = bits, U32, 1000, [9:9], "false", "true"
- enabledStep1Limiter = bits, U32, 1000, [10:10], "false", "true"
- useTpicAdvancedMode = bits, U32, 1000, [11:11], "false", "true"
- useLcdScreen = bits, U32, 1000, [12:12], "false", "true"
- startConsoleInBinaryMode= bits, U32, 1000, [13:13], "false", "true"
- useWarmupPidAfr = bits, U32, 1000, [14:14], "false", "true"
- onOffAlternatorLogic = bits, U32, 1000, [15:15], "false", "true"
- isCJ125Enabled = bits, U32, 1000, [16:16], "false", "true"
- vvtCamSensorUseRise = bits, U32, 1000, [17:17], "false", "true"
- logicAnalyzerPins1 = bits, U32, 1004, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- logicAnalyzerPins2 = bits, U32, 1008, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- logicAnalyzerPins3 = bits, U32, 1012, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- logicAnalyzerPins4 = bits, U32, 1016, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
-;skipping logicAnalyzerMode offset 1020
-;skipping unrealisticRpmThreashold offset 1024
- mainRelayPinMode = bits, U32, 1028, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- max31855_cs1 = bits, U32, 1032, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs2 = bits, U32, 1036, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs3 = bits, U32, 1040, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs4 = bits, U32, 1044, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs5 = bits, U32, 1048, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs6 = bits, U32, 1052, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs7 = bits, U32, 1056, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855_cs8 = bits, U32, 1060, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- max31855spiDevice = bits,U32, 1064, [0:1], "Off", "SPI1", "SPI2", "SPI3"
- fsioPins1 = bits, U32, 1068, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins2 = bits, U32, 1072, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins3 = bits, U32, 1076, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins4 = bits, U32, 1080, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins5 = bits, U32, 1084, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins6 = bits, U32, 1088, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins7 = bits, U32, 1092, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins8 = bits, U32, 1096, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins9 = bits, U32, 1100, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins10 = bits, U32, 1104, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins11 = bits, U32, 1108, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins12 = bits, U32, 1112, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins13 = bits, U32, 1116, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins14 = bits, U32, 1120, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins15 = bits, U32, 1124, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioPins16 = bits, U32, 1128, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- gpioPinModes1 = bits, U32, 1132, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes2 = bits, U32, 1136, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes3 = bits, U32, 1140, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes4 = bits, U32, 1144, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes5 = bits, U32, 1148, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes6 = bits, U32, 1152, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes7 = bits, U32, 1156, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes8 = bits, U32, 1160, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes9 = bits, U32, 1164, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes10 = bits, U32, 1168, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes11 = bits, U32, 1172, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes12 = bits, U32, 1176, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes13 = bits, U32, 1180, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes14 = bits, U32, 1184, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes15 = bits, U32, 1188, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- gpioPinModes16 = bits, U32, 1192, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- consoleUartDevice = bits,U32, 1196, [0:1], "Off", "UART1", "UART2", "UART3"
-;skipping unused77 offset 1200
-;skipping unused78 offset 1204
- nb2ratioFrom = scalar, F32, 1208, "value", 1, 0, 0, 1000, 5
- nb2ratioTo = scalar, F32, 1212, "value", 1, 0, 0, 1000, 5
- triggerErrorPin = bits, U32, 1216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- triggerErrorPinMode = bits, U32, 1220, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- acRelayPin = bits, U32, 1224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- acRelayPinMode = bits, U32, 1228, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- fsioFrequency1 = scalar, U16, 1232, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency2 = scalar, U16, 1234, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency3 = scalar, U16, 1236, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency4 = scalar, U16, 1238, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency5 = scalar, U16, 1240, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency6 = scalar, U16, 1242, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency7 = scalar, U16, 1244, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency8 = scalar, U16, 1246, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency9 = scalar, U16, 1248, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency10 = scalar, U16, 1250, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency11 = scalar, U16, 1252, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency12 = scalar, U16, 1254, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency13 = scalar, U16, 1256, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency14 = scalar, U16, 1258, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency15 = scalar, U16, 1260, "Hz", 1, 0, 0, 3000, 0
- fsioFrequency16 = scalar, U16, 1262, "Hz", 1, 0, 0, 3000, 0
- hip9011CsPin = bits, U32, 1264, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- hip9011IntHoldPin = bits, U32, 1268, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- hip9011IntHoldPinMode = bits, U32, 1272, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- fsio_setting1 = scalar, F32, 1276, "Val", 1, 0, 0, 18000, 4
- fsio_setting2 = scalar, F32, 1280, "Val", 1, 0, 0, 18000, 4
- fsio_setting3 = scalar, F32, 1284, "Val", 1, 0, 0, 18000, 4
- fsio_setting4 = scalar, F32, 1288, "Val", 1, 0, 0, 18000, 4
- fsio_setting5 = scalar, F32, 1292, "Val", 1, 0, 0, 18000, 4
- fsio_setting6 = scalar, F32, 1296, "Val", 1, 0, 0, 18000, 4
- fsio_setting7 = scalar, F32, 1300, "Val", 1, 0, 0, 18000, 4
- fsio_setting8 = scalar, F32, 1304, "Val", 1, 0, 0, 18000, 4
- fsio_setting9 = scalar, F32, 1308, "Val", 1, 0, 0, 18000, 4
- fsio_setting10 = scalar, F32, 1312, "Val", 1, 0, 0, 18000, 4
- fsio_setting11 = scalar, F32, 1316, "Val", 1, 0, 0, 18000, 4
- fsio_setting12 = scalar, F32, 1320, "Val", 1, 0, 0, 18000, 4
- fsio_setting13 = scalar, F32, 1324, "Val", 1, 0, 0, 18000, 4
- fsio_setting14 = scalar, F32, 1328, "Val", 1, 0, 0, 18000, 4
- fsio_setting15 = scalar, F32, 1332, "Val", 1, 0, 0, 18000, 4
- fsio_setting16 = scalar, F32, 1336, "Val", 1, 0, 0, 18000, 4
- spi1mosiPin = bits, U32, 1340, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi1misoPin = bits, U32, 1344, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi1sckPin = bits, U32, 1348, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi2mosiPin = bits, U32, 1352, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi2misoPin = bits, U32, 1356, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi2sckPin = bits, U32, 1360, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi3mosiPin = bits, U32, 1364, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi3misoPin = bits, U32, 1368, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- spi3sckPin = bits, U32, 1372, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
-;skipping hip9011Gain offset 1376
- joystickCenterPin = bits, U32, 1380, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- joystickAPin = bits, U32, 1384, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- joystickBPin = bits, U32, 1388, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- joystickCPin = bits, U32, 1392, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- joystickDPin = bits, U32, 1396, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- sensorChartMode = bits, S32, 1400, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID"
-;skipping mafSensorType offset 1404
- vehicleSpeedSensorInputPin = bits, U32, 1408, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- clutchUpPin = bits, U32, 1412, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- clutchUpPinMode = scalar, F32, 1416, "ms", 1, 0, 0, 200, 1
- fsioDigitalInputs1 = bits, U32, 1420, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs2 = bits, U32, 1424, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs3 = bits, U32, 1428, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs4 = bits, U32, 1432, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs5 = bits, U32, 1436, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs6 = bits, U32, 1440, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs7 = bits, U32, 1444, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs8 = bits, U32, 1448, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs9 = bits, U32, 1452, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs10 = bits, U32, 1456, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs11 = bits, U32, 1460, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs12 = bits, U32, 1464, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs13 = bits, U32, 1468, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs14 = bits, U32, 1472, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs15 = bits, U32, 1476, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- fsioDigitalInputs16 = bits, U32, 1480, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- frequencyReportingMapInputPin = bits, U32, 1484, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- vvtDisplayInverted = bits, U32, 1488, [0:0], "false", "true"
- fuelClosedLoopCorrectionEnabled= bits, U32, 1488, [1:1], "false", "true"
- unusedBit__5 = bits, U32, 1488, [2:2], "false", "true"
- unusedBit__6 = bits, U32, 1488, [3:3], "false", "true"
- useConstantDwellDuringCranking= bits, U32, 1488, [4:4], "false", "true"
- isEngineChartEnabled = bits, U32, 1488, [5:5], "false", "true"
- unusedBit_7 = bits, U32, 1488, [6:6], "false", "true"
- unusedBit__2 = bits, U32, 1488, [7:7], "false", "true"
- canReadEnabled = bits, U32, 1488, [8:8], "false", "true"
- canWriteEnabled = bits, U32, 1488, [9:9], "false", "true"
- unusedBit_123 = bits, U32, 1488, [10:10], "false", "true"
- unusedbit_9 = bits, U32, 1488, [11:11], "false", "true"
- unusedbit_10 = bits, U32, 1488, [12:12], "false", "true"
- isAlternatorControlEnabled= bits, U32, 1488, [13:13], "false", "true"
- unusedBit__3 = bits, U32, 1488, [14:14], "false", "true"
- unusedbit_8 = bits, U32, 1488, [15:15], "false", "true"
- cutFuelOnHardLimit = bits, U32, 1488, [16:16], "false", "true"
- cutSparkOnHardLimit = bits, U32, 1488, [17:17], "false", "true"
- step1fuelCutEnable = bits, U32, 1488, [18:18], "false", "true"
- step1SparkCutEnable = bits, U32, 1488, [19:19], "false", "true"
- hasFrequencyReportingMapSensor= bits, U32, 1488, [20:20], "false", "true"
- hipOutputChannel = bits, U32, 1492, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- idleMode = bits, U32, 1496, [0:0], "false", "true"
- isInjectionEnabled = bits, U32, 1500, [0:0], "false", "true"
- isIgnitionEnabled = bits, U32, 1500, [1:1], "false", "true"
- isCylinderCleanupEnabled= bits, U32, 1500, [2:2], "false", "true"
- secondTriggerChannelEnabled= bits, U32, 1500, [3:3], "false", "true"
- needSecondTriggerInputDeprecated= bits, U32, 1500, [4:4], "false", "true"
- isMapAveragingEnabled = bits, U32, 1500, [5:5], "false", "true"
- anotherUnusedBit1 = bits, U32, 1500, [6:6], "false", "true"
- anotherUnusedBit2 = bits, U32, 1500, [7:7], "false", "true"
- isTunerStudioEnabled = bits, U32, 1500, [8:8], "false", "true"
- isWaveAnalyzerEnabled = bits, U32, 1500, [9:9], "false", "true"
- anotherUnusedBit212 = bits, U32, 1500, [10:10], "false", "true"
- isPrintTriggerSynchDetails= bits, U32, 1500, [11:11], "false", "true"
- isManualSpinningMode = bits, U32, 1500, [12:12], "false", "true"
- twoWireBatchInjection = bits, U32, 1500, [13:13], "false", "true"
- useOnlyRisingEdgeForTrigger= bits, U32, 1500, [14:14], "false", "true"
- twoWireBatchIgnition = bits, U32, 1500, [15:15], "false", "true"
- engineChartSize = scalar, U32, 1504, "count", 1, 0, 0, 300, 0
- targetIdleRpm = scalar, S32, 1508, "RPM", 1, 0, 0, 7000, 0
- acSwitchAdc = bits, U32, 1512, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- ignMathCalculateAtIndex = scalar, S32, 1516, "index", 1, 0, 0, 7000, 0
-;skipping acCutoffLowRpm offset 1520
-;skipping acCutoffHighRpm offset 1522
-;skipping acIdleRpmBump offset 1524
- warningPeriod = scalar, S16, 1526, "seconds", 1, 0, 0, 60, 0
- vRefAdcChannel = bits, U32, 1528, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
-;skipping knockDetectionWindowStart offset 1532
-;skipping knockDetectionWindowEnd offset 1536
- idleStepperReactionTime = scalar, F32, 1540, "ms", 1, 0, 1, 300, 0
- knockVThreshold = scalar, F32, 1544, "V", 1, 0, 1, 5, 2
- fsioInputModes1 = scalar, F32, 1548, "ms", 1, 0, 0, 200, 1
- fsioInputModes2 = scalar, F32, 1552, "ms", 1, 0, 0, 200, 1
- fsioInputModes3 = scalar, F32, 1556, "ms", 1, 0, 0, 200, 1
- fsioInputModes4 = scalar, F32, 1560, "ms", 1, 0, 0, 200, 1
- fsioInputModes5 = scalar, F32, 1564, "ms", 1, 0, 0, 200, 1
- fsioInputModes6 = scalar, F32, 1568, "ms", 1, 0, 0, 200, 1
- fsioInputModes7 = scalar, F32, 1572, "ms", 1, 0, 0, 200, 1
- fsioInputModes8 = scalar, F32, 1576, "ms", 1, 0, 0, 200, 1
- fsioInputModes9 = scalar, F32, 1580, "ms", 1, 0, 0, 200, 1
- fsioInputModes10 = scalar, F32, 1584, "ms", 1, 0, 0, 200, 1
- fsioInputModes11 = scalar, F32, 1588, "ms", 1, 0, 0, 200, 1
- fsioInputModes12 = scalar, F32, 1592, "ms", 1, 0, 0, 200, 1
- fsioInputModes13 = scalar, F32, 1596, "ms", 1, 0, 0, 200, 1
- fsioInputModes14 = scalar, F32, 1600, "ms", 1, 0, 0, 200, 1
- fsioInputModes15 = scalar, F32, 1604, "ms", 1, 0, 0, 200, 1
- fsioInputModes16 = scalar, F32, 1608, "ms", 1, 0, 0, 200, 1
- externalKnockSenseAdc = bits, U32, 1612, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
-;skipping unsed2342342 offset 1616
- idleStepperTotalSteps = scalar, S32, 1628, "count", 1, 0, 5, 3000, 0
- stepperEnablePin = bits, U32, 1632, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- noAccelAfterHardLimitPeriodSecs = scalar, F32, 1636, "sec", 1, 0, 0, 60, 0
- mapAveragingSchedulingAtIndex = scalar, S32, 1640, "index", 1, 0, 0, 7000, 0
- baroCorrPressureBins = array, F32, 1644, [4], "kPa", 1, 0, 0.0, 200, 2
- baroCorrRpmBins = array, F32, 1660, [4], "RPM", 1, 0, 0.0, 18000, 2
- baroCorrTable = array, F32, 1676, [4x4],"%", 1, 0, 0, 999.0, 2
- spi2SckMode = bits, U32, 1740, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
- spi2MosiMode = bits, U32, 1744, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
- spi2MisoMode = bits, U32, 1748, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
- crankingTpsCoef = array, F32, 1752, [8], "%", 1, 0, 0.0, 700.0, 2
- crankingTpsBins = array, F32, 1784, [8], "%", 1, 0, 0.0, 100.0, 2
- tachPulseDuractionMs = scalar, F32, 1816, "ms", 1, 0, 0.0, 100.0, 2
- tachPulseTriggerIndex = scalar, S32, 1820, "index", 1, 0, 0.0, 360.0, 0
- suckedOffCoef = scalar, F32, 1824, "%", 1, 0, 0.0, 300.0, 2
- unused71 = array, F32, 1828, [7],
- addedToWallCoef = scalar, F32, 1856, "%", 1, 0, 0.0, 300.0, 2
- unused72 = array, F32, 1860, [7],
- mapErrorDetectionTooLow = scalar, F32, 1888, "kPa", 1, 0, -100.0, 100.0, 2
- mapErrorDetectionTooHigh = scalar, F32, 1892, "kPa", 1, 0, -100.0, 800.0, 2
- step1RpmWindow = scalar, S32, 1896, "rpm", 1, 0, 0, 3000.0, 2
- idleRpmPid_pFactor = scalar, F32, 1900, "value", 1, 0, -1000, 1000, 5
- idleRpmPid_iFactor = scalar, F32, 1904, "value", 1, 0, -1000, 1000, 5
- idleRpmPid_dFactor = scalar, F32, 1908, "value", 1, 0, -1000, 1000, 5
- idleRpmPid_offset = scalar, F32, 1912, "value", 1, 0, 0, 1000, 3
-;skipping idleDT offset 1916
-;skipping idleControl offset 1920
- communicationPin = bits, U32, 1924, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- runningPin = bits, U32, 1928, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- binarySerialTxPin = bits, U32, 1932, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- binarySerialRxPin = bits, U32, 1936, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- consoleSerialTxPin = bits, U32, 1940, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- consoleSerialRxPin = bits, U32, 1944, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- knockNoise = array, F32, 1948, [8], "v", 1, 0, 0.0, 10, 2
- knockNoiseRpmBins = array, F32, 1980, [8], "RPM", 1, 0, 0.0, 18000, 2
- etb_pFactor = scalar, F32, 2012, "value", 1, 0, -1000, 1000, 5
- etb_iFactor = scalar, F32, 2016, "value", 1, 0, -1000, 1000, 5
- etb_dFactor = scalar, F32, 2020, "value", 1, 0, -1000, 1000, 5
- etb_offset = scalar, F32, 2024, "value", 1, 0, 0, 1000, 3
- cltIdleRpmBins = array, F32, 2028, [16], "C", 1, 0, -100.0, 250.0, 2
- cltIdleRpm = array, F32, 2092, [16], "RPM", 1, 0, 0.0, 400.0, 0
- targetVBatt = scalar, F32, 2156, "Volts", 1, 0, 0,30, 1
- alternatorOffAboveTps = scalar, F32, 2160, "%", 1, 0, 0, 200, 2
- alternatorDT = scalar, S32, 2164, "ms", 1, 0, 0, 3000, 0
- alternatorControl_pFactor = scalar, F32, 2168, "value", 1, 0, -1000, 1000, 5
- alternatorControl_iFactor = scalar, F32, 2172, "value", 1, 0, -1000, 1000, 5
- alternatorControl_dFactor = scalar, F32, 2176, "value", 1, 0, -1000, 1000, 5
- alternatorControl_offset = scalar, F32, 2180, "value", 1, 0, 0, 1000, 3
- tpsAccelLength = scalar, S32, 2184, "cycles", 1, 0, 1, 200, 0
- tpsAccelEnrichmentThreshold = scalar, F32, 2188, "roc", 1, 0, 0, 200, 3
- vvtOffset = scalar, F32, 2192, "value", 1, 0, -720, 1000, 5
- engineLoadAccelLength = scalar, S32, 2196, "cycles", 1, 0, 1, 200, 0
- engineLoadDecelEnleanmentThreshold = scalar, F32, 2200, "roc", 1, 0, 0, 200, 3
- engineLoadDecelEnleanmentMultiplier = scalar, F32, 2204, "coeff", 1, 0, 0, 200, 3
- engineLoadAccelEnrichmentThreshold = scalar, F32, 2208, "roc", 1, 0, 0, 200, 3
- engineLoadAccelEnrichmentMultiplier = scalar, F32, 2212, "coeff", 1, 0, 0, 200, 3
- fatalErrorPin = bits, U32, 2216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- warninigPin = bits, U32, 2220, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- configResetPin = bits, U32, 2224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- uartConsoleSerialSpeed = scalar, U32, 2228, "BPs", 1, 0, 0,1000000, 0
- tpsDecelEnleanmentThreshold = scalar, F32, 2232, "roc", 1, 0, 0, 200, 3
- tpsDecelEnleanmentMultiplier = scalar, F32, 2236, "coeff", 1, 0, 0, 200, 3
- slowAdcAlpha = scalar, F32, 2240, "coeff", 1, 0, 0, 200, 3
- debugMode = bits, U32, 2244, [0:3], "Alternator_PID", "TPS accel enrich", "Warmup PID", "IDLE", "EL accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT PID", "Cranking", "Timing", "Closed-loop fuel corr", "VSS", "SD card", "mode14", "mode15"
- warmupAfrPid_pFactor = scalar, F32, 2248, "value", 1, 0, -1000, 1000, 5
- warmupAfrPid_iFactor = scalar, F32, 2252, "value", 1, 0, -1000, 1000, 5
- warmupAfrPid_dFactor = scalar, F32, 2256, "value", 1, 0, -1000, 1000, 5
- warmupAfrPid_offset = scalar, F32, 2260, "value", 1, 0, 0, 1000, 3
- warmupTargetAfrBins = array, F32, 2264, [4], "C", 1, 0, -100.0, 250.0, 2
- warmupTargetAfr = array, F32, 2280, [4], "AFR", 1, 0, 0.0, 20.0, 2
- warmupAfrThreshold = scalar, F32, 2296, "tempterature", 1, 0, 0, 200, 3
- boostCutPressure = scalar, F32, 2300, "kPa", 1, 0, 0, 500, 0
- mapAccelTaperBins = array, F32, 2304, [8], "counter", 1, 0, 0.0, 300, 0
- mapAccelTaperMult = array, F32, 2336, [8], "mult", 1, 0, 0.0, 300, 2
- dizzySparkOutputPin = bits, U32, 2368, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- dizzySparkOutputPinMode = bits, U32, 2372, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- fsioAdc1 = bits, U32, 2376, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fsioAdc2 = bits, U32, 2380, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fsioAdc3 = bits, U32, 2384, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fsioAdc4 = bits, U32, 2388, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fixedTiming = scalar, F32, 2392, "deg", 1, 0, -720, 720, 2
- mapLowValueVoltage = scalar, F32, 2396, "v", 1, 0, 0.0, 10, 2
- mapHighValueVoltage = scalar, F32, 2400, "v", 1, 0, 0.0, 10, 2
- egoValueShift = scalar, F32, 2404, "value", 1, 0, -10.0, 10, 2
- camInput = bits, U32, 2408, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
- auxPidDT1 = scalar, U32, 2412, "ms", 1, 0, 0, 3000, 0
- auxPidDT2 = scalar, U32, 2416, "ms", 1, 0, 0, 3000, 0
- auxPidDT3 = scalar, U32, 2420, "ms", 1, 0, 0, 3000, 0
- auxPidDT4 = scalar, U32, 2424, "ms", 1, 0, 0, 3000, 0
- crankingIdleAdjustment = scalar, F32, 2428, "percent", 1, 0, -100.0, 100,
- tChargeMinRpmMinTps = scalar, F32, 2432, "mult", 1, 0, 0, 3, 4
- tChargeMinRpmMaxTps = scalar, F32, 2436, "mult", 1, 0, 0, 3, 4
- tChargeMaxRpmMinTps = scalar, F32, 2440, "mult", 1, 0, 0, 3, 4
- tChargeMaxRpmMaxTps = scalar, F32, 2444, "mult", 1, 0, 0, 3, 4
- auxPidPins1 = bits, U32, 2448, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- auxPidPins2 = bits, U32, 2452, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- auxPidPins3 = bits, U32, 2456, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- auxPidPins4 = bits, U32, 2460, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
- auxPidFrequency1 = scalar, U16, 2464, "Hz", 1, 0, 0, 3000, 0
- auxPidFrequency2 = scalar, U16, 2466, "Hz", 1, 0, 0, 3000, 0
- auxPidFrequency3 = scalar, U16, 2468, "Hz", 1, 0, 0, 3000, 0
- auxPidFrequency4 = scalar, U16, 2470, "Hz", 1, 0, 0, 3000, 0
- alternatorPwmFrequency = scalar, S32, 2472, "Hz", 1, 0, 0, 3000.0, 0
- storageMode = bits, U32, 2476, [0:1], "Auto", "Always", "Never"
- cj125SpiDevice = bits,U32, 2480, [0:1], "Off", "SPI1", "SPI2", "SPI3"
- cj125CsPinMode = bits, U32, 2484, [0:1], "default", "default inverted", "open collector", "open collector inverted"
- auxPid1_pFactor = scalar, F32, 2488, "value", 1, 0, -1000, 1000, 5
- auxPid1_iFactor = scalar, F32, 2492, "value", 1, 0, -1000, 1000, 5
- auxPid1_dFactor = scalar, F32, 2496, "value", 1, 0, -1000, 1000, 5
- auxPid1_offset = scalar, F32, 2500, "value", 1, 0, 0, 1000, 3
- auxPid2_pFactor = scalar, F32, 2504, "value", 1, 0, -1000, 1000, 5
- auxPid2_iFactor = scalar, F32, 2508, "value", 1, 0, -1000, 1000, 5
- auxPid2_dFactor = scalar, F32, 2512, "value", 1, 0, -1000, 1000, 5
- auxPid2_offset = scalar, F32, 2516, "value", 1, 0, 0, 1000, 3
- auxPid3_pFactor = scalar, F32, 2520, "value", 1, 0, -1000, 1000, 5
- auxPid3_iFactor = scalar, F32, 2524, "value", 1, 0, -1000, 1000, 5
- auxPid3_dFactor = scalar, F32, 2528, "value", 1, 0, -1000, 1000, 5
- auxPid3_offset = scalar, F32, 2532, "value", 1, 0, 0, 1000, 3
- auxPid4_pFactor = scalar, F32, 2536, "value", 1, 0, -1000, 1000, 5
- auxPid4_iFactor = scalar, F32, 2540, "value", 1, 0, -1000, 1000, 5
- auxPid4_dFactor = scalar, F32, 2544, "value", 1, 0, -1000, 1000, 5
- auxPid4_offset = scalar, F32, 2548, "value", 1, 0, 0, 1000, 3
- vvtMode = bits, U32, 2552, [0:2], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7"
- biQuad_a0 = scalar, F32, 2556, "v", 1, 0, -1000, 1000, 9
- biQuad_a1 = scalar, F32, 2560, "v", 1, 0, -1000, 1000, 9
- biQuad_a2 = scalar, F32, 2564, "v", 1, 0, -1000, 1000, 9
- biQuad_b1 = scalar, F32, 2568, "v", 1, 0, -1000, 1000, 9
- biQuad_b2 = scalar, F32, 2572, "v", 1, 0, -1000, 1000, 9
- cltTimingBins = array, F32, 2576, [8], "C", 1, 0, -100.0, 250.0, 1
- cltTimingExtra = array, F32, 2608, [8], "degree", 1, 0, -400.0, 400.0, 0
- nbVvtIndex = scalar, S32, 2640, "index", 1, 0, 0, 4.0, 0
-;skipping autoTuneCltThreshold offset 2644
-;skipping autoTuneTpsRocThreshold offset 2648
-;skipping autoTuneTpsQuietPeriod offset 2652
- postCrankingTargetClt = scalar, F32, 2656, "Ñ", 1, 0, 0, 100, 0
- postCrankingFactor = scalar, F32, 2660, "mult", 1, 0, 0, 100, 4
- postCrankingDurationSec = scalar, F32, 2664, "seconds", 1, 0, 0, 100, 2
- auxTempSensor1_tempC_1 = scalar, F32, 2668, "*C", 1, 0, -40, 200, 1
- auxTempSensor1_tempC_2 = scalar, F32, 2672, "*C", 1, 0, -40, 200, 1
- auxTempSensor1_tempC_3 = scalar, F32, 2676, "*C", 1, 0, -40, 200, 1
- auxTempSensor1_resistance_1 = scalar, F32, 2680, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor1_resistance_2 = scalar, F32, 2684, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor1_resistance_3 = scalar, F32, 2688, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor1_bias_resistor = scalar, F32, 2692, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor1_adcChannel = bits, U32, 2696, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- auxTempSensor2_tempC_1 = scalar, F32, 2700, "*C", 1, 0, -40, 200, 1
- auxTempSensor2_tempC_2 = scalar, F32, 2704, "*C", 1, 0, -40, 200, 1
- auxTempSensor2_tempC_3 = scalar, F32, 2708, "*C", 1, 0, -40, 200, 1
- auxTempSensor2_resistance_1 = scalar, F32, 2712, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor2_resistance_2 = scalar, F32, 2716, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor2_resistance_3 = scalar, F32, 2720, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor2_bias_resistor = scalar, F32, 2724, "Ohm", 1, 0, 0, 200000, 1
- auxTempSensor2_adcChannel = bits, U32, 2728, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- fuelClosedLoopCltThreshold = scalar, S16, 2732, "C", 1, 0, 0, 100, 0
- fuelClosedLoopTpsThreshold = scalar, S16, 2734, "%", 1, 0, 0, 100, 0
- fuelClosedLoopRpmThreshold = scalar, S16, 2736, "rpm", 1, 0, 0, 5000, 0
- etbFreq = scalar, S16, 2738, "Hz", 1, 0, 0, 500, 10
- fuelClosedLoopPid_pFactor = scalar, F32, 2740, "value", 1, 0, -1000, 1000, 5
- fuelClosedLoopPid_iFactor = scalar, F32, 2744, "value", 1, 0, -1000, 1000, 5
- fuelClosedLoopPid_dFactor = scalar, F32, 2748, "value", 1, 0, -1000, 1000, 5
- fuelClosedLoopPid_offset = scalar, F32, 2752, "value", 1, 0, 0, 1000, 3
- fuelClosedLoopAfrLowThreshold = scalar, F32, 2756, "ratio", 1, 0, 0, 100, 1
- fuelClosedLoopAfrHighThreshold = scalar, F32, 2760, "ratio", 1, 0, 0, 100, 1
- stepperEnablePinMode = bits, U32, 2764, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
- cj125ua = bits, U32, 2768, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- cj125ur = bits, U32, 2772, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
- timing_offset_cylinder1 = scalar, F32, 2776, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder2 = scalar, F32, 2780, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder3 = scalar, F32, 2784, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder4 = scalar, F32, 2788, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder5 = scalar, F32, 2792, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder6 = scalar, F32, 2796, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder7 = scalar, F32, 2800, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder8 = scalar, F32, 2804, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder9 = scalar, F32, 2808, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder10 = scalar, F32, 2812, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder11 = scalar, F32, 2816, "Val", 1, 0, -20000000, 20000000, 1
- timing_offset_cylinder12 = scalar, F32, 2820, "Val", 1, 0, -20000000, 20000000, 1
-;skipping unused offset 2824
- le_formulas1 = array, U08, 3048, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas2 = array, U08, 3248, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas3 = array, U08, 3448, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas4 = array, U08, 3648, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas5 = array, U08, 3848, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas6 = array, U08, 4048, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas7 = array, U08, 4248, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas8 = array, U08, 4448, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas9 = array, U08, 4648, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas10 = array, U08, 4848, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas11 = array, U08, 5048, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas12 = array, U08, 5248, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas13 = array, U08, 5448, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas14 = array, U08, 5648, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas15 = array, U08, 5848, [200],"char", 1, 0, 0.0, 3.0, 2
- le_formulas16 = array, U08, 6048, [200],"char", 1, 0, 0.0, 3.0, 2
- timingMultiplier = array, U08, 6248, [200],"char", 1, 0, 0.0, 3.0, 2
- timingAdditive = array, U08, 6448, [200],"char", 1, 0, 0.0, 3.0, 2
- cltFuelCorrBins = array, F32, 6648, [16], "C", 1, 0, -100.0, 250.0, 2
- cltFuelCorr = array, F32, 6712, [16], "%", 1, 0, 0.0, 500.0, 2
- iatFuelCorrBins = array, F32, 6776, [16], "C", 1, 0, -100.0, 250.0, 2
- iatFuelCorr = array, F32, 6840, [16], "%", 1, 0, 0.0, 500.0, 2
- crankingFuelCoef = array, F32, 6904, [8], "%", 1, 0, 0.0, 700.0, 2
- crankingFuelBins = array, F32, 6936, [8], "C", 1, 0, -80.0, 170.0, 2
- crankingCycleCoef = array, F32, 6968, [8], "%", 1, 0, 0.0, 500.0, 2
- crankingCycleBins = array, F32, 7000, [8], "counter", 1, 0, -80.0, 170.0, 2
- cltIdleCorrBins = array, F32, 7032, [16], "C", 1, 0, -100.0, 250.0, 2
- cltIdleCorr = array, F32, 7096, [16], "%", 1, 0, 0.0, 500.0, 2
- mafDecoding = array, F32, 7160, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2
- mafDecodingBins = array, F32, 8184, [256], "V", 1, 0, -5.0, 150.0, 2
- ignitionIatCorrTable = array, F32, 9208, [16x16],"deg", 1, 0, -720, 720, 2
- ignitionIatCorrLoadBins = array, F32, 10232, [16], "Temperature", 1, 0.0, 0, 300.0, 2
- ignitionIatCorrRpmBins = array, F32, 10296, [16], "RPM", 1, 0.0, 0, 18000.0, 2
- injectionPhase = array, F32, 10360, [16x16],"deg", 1, 0, -720, 720, 2
- injPhaseLoadBins = array, F32, 11384, [16], "Load", 1, 0.0, 0, 300.0, 2
- injPhaseRpmBins = array, F32, 11448, [16], "RPM", 1, 0.0, 0, 18000.0, 2
- fuelTable = array, F32, 11512, [16x16],"ms", 1, 0, 0.0, 300.0, 2
- fuelLoadBins = array, F32, 12536, [16], "V", 1, 0, 0.0, 300.0, 2
- fuelRpmBins = array, F32, 12600, [16], "RPM", 1, 0, 0.0, 25500.0, 2
- ignitionTable = array, F32, 12664, [16x16],"deg", 1, 0, -20, 90, 2
- ignitionLoadBins = array, F32, 13688, [16], "Load", 1, 0.0, 0, 300.0, 2
- ignitionRpmBins = array, F32, 13752, [16], "RPM", 1, 0.0, 0, 18000.0, 2
- veTable = array, F32, 13816, [16x16],"%", 1, 0, 0, 999.0, 2
- veLoadBins = array, F32, 14840, [16], "%", 1, 0.0, 0, 300.0, 2
- veRpmBins = array, F32, 14904, [16], "RPM", 1, 0.0, 0, 18000.0, 2
- afrTable = array, U08, 14968, [16x16],"deg", 0.1, 0, 0, 25.0, 1
- afrLoadBins = array, F32, 15224, [16], "%", 1, 0.0, 0, 300.0, 2
- afrRpmBins = array, F32, 15288, [16], "RPM", 1, 0.0, 0, 18000.0, 2
- tpsTpsAccelTable = array, F32, 15352, [8x8],"value", 1, 0, 0.0, 30000.0, 2
- tpsTpsAccelFromRpmBins = array, F32, 15608, [8], "from", 1, 0, 0.0, 30000.0, 2
- tpsTpsAccelToRpmBins = array, F32, 15640, [8], "to", 1, 0, 0.0, 25500.0, 2
- fsioTable1 = array, F32, 15672, [8x8],"value", 1, 0, 0.0, 30000.0, 2
- fsioTable1LoadBins = array, F32, 15928, [8], "L", 1, 0, 0.0, 30000.0, 2
- fsioTable1RpmBins = array, F32, 15960, [8], "RPM", 1, 0, 0.0, 25500.0, 2
- fsioTable2 = array, U08, 15992, [8x8],"value", 1, 0, 0.0, 255.0, 0
- fsioTable2LoadBins = array, F32, 16056, [8], "L", 1, 0, 0.0, 255, 0
- fsioTable2RpmBins = array, F32, 16088, [8], "RPM", 1, 0, 0.0, 25500.0, 2
- fsioTable3 = array, U08, 16120, [8x8],"value", 1, 0, 0.0, 255.0, 0
- fsioTable3LoadBins = array, F32, 16184, [8], "L", 1, 0, 0.0, 255, 0
- fsioTable3RpmBins = array, F32, 16216, [8], "RPM", 1, 0, 0.0, 25500.0, 2
- fsioTable4 = array, U08, 16248, [8x8],"value", 1, 0, 0.0, 255.0, 0
- fsioTable4LoadBins = array, F32, 16312, [8], "L", 1, 0, 0.0, 255, 0
- fsioTable4RpmBins = array, F32, 16344, [8], "RPM", 1, 0, 0.0, 25500.0, 2
-; total TS size = 16376
-[SettingContextHelp]
- injector_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"
- directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nPS: Funny name, right? :)"
- cranking_baseFuel = "Fuel squirt duration while cranking\nA number of curves adjust this value according to CLT/IAT/TPS etc"
- cranking_rpm = "Cranking mode threshold. Special cranking logic controls fuel and spark while RPM is below this threshold\nset cranking_rpm X"
- 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.\nset cranking_charge_angle X"
- knockBandCustom = "kHz knock band override"
- cylinderBore = "Cylinder diameter, in mm."
- sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm"
- fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nset algorithm X"
- injectionMode = "'batched' means two injectors are wired together\nset injection_mode X"
- extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?"
- crankingTimingAngle = "Timing advance while engine cranking\nset cranking_timing_angle X"
- ignitionMode = "'wasted' means one coil is driving two spark plugs in two cylinders, with one of the aparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X"
- ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant"
- fixedModeTiming = "This value is used in 'fixed timing' mode, i.e. constant timing\nThis mode is useful for instance while adjusting distributor location"
- globalTriggerAngleOffset = "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.\nset global_trigger_offset_angle X"
- analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB"
- vbattDividerCoeff = "Battery Voltage input resistor divider coefficient"
- fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsuis"
- fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsuis"
- vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h"
- trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken"
- tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin."
- vvtCamSensorUseRise = "Use rise or fall signal front"
- sensorChartMode = "rusEfi console Sensor Sniffer mode"
- isInjectionEnabled = "enable injection"
- isIgnitionEnabled = "enable ignition"
- isCylinderCleanupEnabled = "If TPS above 95% no fuel would be injected during cranking\nenable cylinder_cleanup"
- isPrintTriggerSynchDetails = "enable trigger_details"
- twoWireBatchInjection = "This is needed if batched injection and individual injector wiring\nenable two_wire_batch_injection"
- useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front"
- twoWireBatchIgnition = "This is needed if batched igniton (waster spark) and individual coil wiring"
- ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback."
- mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback."
- tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)"
- slowAdcAlpha = "ExpAverage alpha coefficient"
- dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged. See also tachOutputPin"
-
-
-; CONFIG_DEFINITION_END
-
-
-[Tuning]
- spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
- cursorDepth = 2 ; Same as spot depth.
-
- gaugeColumns = 1 ; Only 1 or 2 are valid.
-
- pageButtons = "&EGO"
- gauge1 = tachometer
- gauge2 = afr1Gauge
- gauge3 = mapGaugeValue
- gauge4 = veValueGauge
-
-
-[VeAnalyze]
-
- ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
-#if tuneByMAF
- veAnalyzeMap = fuelTableTbl, afrTableTbl, AFRactual, egoCorrection, { 1 }
-#else
- veAnalyzeMap = veTableTbl, afrTableTbl, AFRactual, egoCorrection, { 1 }
-#endif
- ;lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom
-
- ; filter = Name, "DisplayName", outputChannel, operator, defaultVal, userAdjustable
- filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
-
-#if CELSIUS
- filter = minCltFilter, "Minimum CLT", coolant, < , 60, , true
-#else
- filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
-#endif
-
- filter = deltaTps, "dTPS", deltaTps > , 50, , true
-
- filter = VBatt, "VBatt", VBatt < , 12, , true
-
-; filter = minTps, "Minimum TPS", TPS, > , 1, , true
-
-
-;[VeAnalyze]
-; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRactual, egoCorrection , { 1 }
-; filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
-
-
-
-[OutputChannels]
-
-; see TS_FILE_VERSION in firmware code
-fileVersion = { 20161225 }
-
- ochGetCommand = "O"
-
-; see TS_OUTPUT_SIZE in console source code
- ochBlockSize = 356
-
- rpm = scalar, U32, 0, "RPM", 1, 0.00000
-#if CELSIUS
- coolant = scalar, F32, 4, "°C", 1, 0.0
-#else
- coolant = scalar, F32, 4, "°F", {9/5}, 17.77777
-#endif
-#if CELSIUS
- intake = scalar, F32, 8, "°C", 1, 0.0
-#else
- intake = scalar, F32, 8, "°F", {9/5}, 17.77777
-#endif
- TPS = scalar, F32, 12, "%", 1, 0
- MAF = scalar, F32, 16, "V", 1, 0
- AFRactual = scalar, F32, 20, "AFR", 1, 0.0
- engineLoad = scalar, F32, 24, "%", 1, 0.0 ; Blend of MAP and TPS, depends on algorithm
- VBatt = scalar, F32, 28, "V", 1, 0.0
- ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale)
- tpsADC = scalar, U16, 32, "ADC", 1, 0.0;
- alignmet = scalar, U16, 34, "al", 1, 0.0;
- baroPressure = scalar, F32, 36, "pres", 1, 0.0;
- MAPValue = scalar, F32, 40, "MAP", 1, 0.0;
- ; total fuel squirt duration (in MS) per engine cycle according to current CLT
- crankingFuel = scalar, F32, 44, "ms", 1, 0.0;
- baseFuel = scalar, F32, 48, "ms", 1, 0
- tCharge = scalar, F32, 52, "T", 1, 0.0;
- ign_adv = scalar, F32, 56, "deg", 1, 0.0;
- sparkDwellValue = scalar, F32, 60, "ms", 1, 0.0;
- ; actual total Ms time per engine cycle with all corrections
- pulseWidth = scalar, F32, 64, "ms", 1, 0.0;
- debugFloatField1 = scalar, F32, 68, "val", 1, 0.0;
-
- hasSdCard = bits, U32, 72, [0:0], "true", "false";
- isIgnitionEnabledIndicator=bits, U32, 72, [1:1], "true", "false";
- ind_injection_enabled=bits,U32, 72, [2:2], "true", "false";
- isCylinderCleanupEnabled=bits, U32, 72, [3:3], "true", "false";
- isCylinderCleanupActivated=bits,U32,72, [4:4], "true", "false";
- ind_fuel_pump = bits, U32, 72, [5:5], "true", "false";
- ind_fan = bits, U32, 72, [6:6], "true", "false";
- ind_o2_heater = bits, U32, 72, [7:7], "true", "false";
- ind_check_engine= bits, U32, 72, [8:8], "true", "false";
- needBurn = bits, U32, 72, [9:9], "true", "false";
- ind_2nd_trigger_en=bits, U32, 72, [10:10], "true", "false";
- clutchUpState =bits, U32, 72, [11:11], "true", "false";
- clutchDownState =bits, U32, 72, [12:12], "true", "false";
- knockEverIndicator=bits, U32, 72, [13:13], "true", "false";
- knockNowIndicator=bits, U32, 72, [14:14], "true", "false";
- vehicleSpeedKph = scalar, F32, 76, "kph", 1, 0.0;
-
- ind_tps_error = bits, U32, 80, [0:0], "true", "false";
- ind_clt_error = bits, U32, 80, [1:1], "true", "false";
- ind_map_error = bits, U32, 80, [2:2], "true", "false";
- ind_iat_error = bits, U32, 80, [3:3], "true", "false";
- ind_isTriggerError = bits, U32, 80, [5:5], "true", "false";
- ind_hasFatalError=bits, U32, 80, [6:6], "true", "false";
- ind_isWarnNow =bits, U32, 80, [7:7], "true", "false";
- firmwareTsVersion = scalar,U32, 84, "version_p", 1, 0
- egt1 = scalar, S16, 88, "°C", 1, 0
- egt2 = scalar, S16, 90, "°C", 1, 0
- egt3 = scalar, S16, 92, "°C", 1, 0
- egt4 = scalar, S16, 94, "°C", 1, 0
- egt5 = scalar, S16, 96, "°C", 1, 0
- egt6 = scalar, S16, 98, "°C", 1, 0
- egt7 = scalar, S16, 100, "°C", 1, 0
- egt8 = scalar, S16, 102, "°C", 1, 0
- rpmAcceleration = scalar, F32, 104, "dRpm", 1, 0
- massAirFlowValue= scalar, F32, 108, "Kg/h", 1, 0
- veValue = scalar, F32, 112, "ratio", 1, 0
- deltaTps = scalar, F32, 116, "ratio", 1, 0
- triggerErrorsCounter = scalar, U32,120, "counter", 1, 0
- engineLoadAccelExtra = scalar,F32, 124, "value", 1, 0
- tpsAccelFuel = scalar, F32, 128, "ms", 1, 0
- baroCorrection = scalar, F32, 132, "%", 1, 0
- pedalPosition = scalar, F32, 136, "%", 1, 0
- injectorDutyCycle= scalar, F32, 140, "%", 1, 0
- knockCount = scalar, U32, 144, "counter", 1, 0
- ; fuelLevel 148
- knockLevel = scalar, F32, 152, "Volts", 1, 0
- ; totalTriggerErrorCounter 156
- wallFuelAmount = scalar, F32, 160, "ms", 1, 0
- iatCorrection = scalar, F32, 164, "%", 1, 0
- wallFuelCorrection = scalar, F32, 168, "ms", 1, 0
- curIdlePosition = scalar, F32, 172, "percent", 1, 0
- cltCorrection = scalar, F32, 184, "%", 1, 0
- debugIntField1 = scalar, U32, 192, "val", 1, 0.0;
- debugFloatField2 = scalar, F32, 200, "val", 1, 0.0;
- debugFloatField3 = scalar, F32, 204, "val", 1, 0.0;
- debugFloatField4 = scalar, F32, 208, "val", 1, 0.0;
- debugFloatField5 = scalar, F32, 212, "val", 1, 0.0;
- debugIntField2 = scalar, U32, 216, "val", 1, 0.0;
- debugIntField3 = scalar, U32, 220, "val", 1, 0.0;
- engineLoadDelta = scalar,F32, 228, "value", 1, 0
- speedToRpmRatio = scalar,F32, 232, "value", 1, 0
- warningCounter = scalar,U32, 236, "count", 1, 0
- lastErrorCode = scalar,U32, 240, "error", 1, 0
- internalMcuTemperature = scalar,F32, 244, "C", 1, 0
- vvtPosition = scalar,F32, 248, "deg", 1, 0
- engineMode = scalar, U32, 252, "em", 1, 0.0;
- debugFloatField6 = scalar, F32, 256, "val", 1, 0.0;
- debugFloatField7 = scalar, F32, 260, "val", 1, 0.0;
- firmwareVersion = scalar,U32, 264, "version_f", 1, 0
- fuelPidCorrection = scalar, F32, 268, "ms", 1, 0
- coilDutyCycle = scalar, F32, 272, "perc", 1, 0
-
- egoCorrection = { 100 }
- time = { timeNow }
-; engineLoad = { fuleAlgorithm == 0 ? MAF : TPS }
-
-[CurveEditor]
-; xAxis = leftValue, rightValue, step
-; yAxis = bottomValue, topValue, step
-
-
- curve = knockThresholdCurve, "Engine knock threshold RPM based"
- columnLabel = "RPM", "Threshold"
- xAxis = 0, 8000, 10
- yAxis = 0, 8, 10
- xBins = knockNoiseRpmBins, rpm
- yBins = knockNoise
- gauge = rpm
-
- curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper"
- columnLabel = "Distance", "Multiplier"
- xAxis = 0, 128, 10
- yAxis = -5, 5, 10
- xBins = mapAccelTaperBins
- yBins = mapAccelTaperMult
-
- curve = dwellCorrection, "Dwell time RPM based"
- columnLabel = "RPM", "Dwell"
- xAxis = 0, 8000, 10
- yAxis = 0, 30, 10
- xBins = sparkDwellRpmBins, rpm
- yBins = sparkDwellValues
- gauge = rpm
-
- curve = map_samplingAngleCurve, "MAP Sampling Start Angle"
- columnLabel = "RPM", "Angle"
- xAxis = 0, 8000, 10
- yAxis = 0, 180, 10
- xBins = map_samplingAngleBins, rpm
- yBins = map_samplingAngle
- gauge = rpm
-
- curve = map_samplingWindowCurve, "MAP Sampling Duration"
- columnLabel = "RPM", "Window"
- xAxis = 0, 8000, 10
- yAxis = 0, 180, 10
- xBins = map_samplingWindowBins, rpm
- yBins = map_samplingWindow
- gauge = rpm
-
- curve = injectorsDeadTime, "Injector Dead Time by VBatt"
- columnLabel = "Voltage", "Dead Time"
- xAxis = 8, 21, 10
- yAxis = -3, 3, 10
- xBins = injector_battLagCorrBins, VBatt
- yBins = injector_battLagCorr
- gauge = VBattGauge
-
- curve = mafDecodingCurve, "MAF Sensor Settings"
- columnLabel = "Voltage", "kg/hour"
- xAxis = -1, 6, 10
- yAxis = -30, 1300, 10
- xBins = mafDecodingBins, MAF
- yBins = mafDecoding
- gauge = mafGaugeVolts
-
- curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier"
- columnLabel = "Coolant", "Multiplier"
- xAxis = -40, 120, 10
- yAxis = 0, 5, 10
- xBins = iatFuelCorrBins, intake
- yBins = iatFuelCorr
- gauge = IATGauge
-
- curve = cltTimingCorrCurve, "Warmup timing correction"
- columnLabel = "Coolant", "Extra"
- xAxis = -40, 120, 10
- yAxis = 0, 50, 100
- xBins = cltTimingBins, coolant
- yBins = cltTimingExtra
- gauge = CLTGauge
-
- curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier"
- columnLabel = "Coolant", "Multiplier"
- xAxis = -40, 120, 10
- yAxis = 0, 50, 100
- xBins = cltFuelCorrBins, coolant
- yBins = cltFuelCorr
- gauge = CLTGauge
-
- curve = crankingCltCurve, "Cranking Coolant Temperature multiplier"
- columnLabel = "Coolant", "Multiplier"
- xAxis = -40, 120, 10
- yAxis = 0, 5, 10
- xBins = crankingFuelBins, coolant
- yBins = crankingFuelCoef
- gauge = CLTGauge
-
- curve = crankingTpsCurve, "Cranking TPS Multiplier"
- columnLabel = "TPS", "Multiplier"
- xAxis = -40, 120, 10
- yAxis = 0, 5, 10
- xBins = crankingTpsBins, TPS
- yBins = crankingTpsCoef
- gauge = throttleGauge
-
- curve = crankingDurationCurve, "Cranking Duration Multiplier"
- columnLabel = "Engine Cycle", "Multiplier"
- xAxis = 0, 1000, 10
- yAxis = 0, 5, 10
- xBins = crankingCycleBins
- yBins = crankingCycleCoef
-
-
- curve = cltIdleCurve, "Warmup IAC position manual Multiplier"
- columnLabel = "Coolant", "Multiplier"
- xAxis = -40, 120, 10
- yAxis = 0, 50, 100
- xBins = cltIdleCorrBins, coolant
- yBins = cltIdleCorr
- gauge = CLTGauge
-
- curve = warmupTargetAfrCurve, "CLT-based target AFR"
- columnLabel = "Coolant", "Correction"
- xAxis = -40, 120, 10
- yAxis = 0, 50, 100
- xBins = warmupTargetAfrBins, coolant
- yBins = warmupTargetAfr
- gauge = CLTGauge
-
-[TableEditor]
- ; table_id, map3d_id, "title", page
- table = fuelTableTbl, fuelTableMap, "Fuel Table", 1
- ; constant, variable
- xBins = fuelRpmBins, rpm
- yBins = fuelLoadBins, engineLoad
- zBins = fuelTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
- table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS acceleration Multiplier", 1
- xBins = tpsTpsAccelFromRpmBins, TPS
- yBins = tpsTpsAccelToRpmBins, TPS
- zBins = tpsTpsAccelTable
-
-
- table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1
- xBins = fsioTable1RpmBins, rpm
- yBins = fsioTable1LoadBins, engineLoad
- zBins = fsioTable1
-
- table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1
- xBins = fsioTable2RpmBins, rpm
- yBins = fsioTable2LoadBins, engineLoad
- zBins = fsioTable2
-
- table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1
- xBins = fsioTable3RpmBins, rpm
- yBins = fsioTable3LoadBins, engineLoad
- zBins = fsioTable3
-
- table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1
- xBins = fsioTable4RpmBins, rpm
- yBins = fsioTable4LoadBins, engineLoad
- zBins = fsioTable4
-
- table = baroCorrTbl, baroCorrMap, "Baro Correction", 1
- ; constant, variable
- xBins = baroCorrRpmBins, rpm
- yBins = baroCorrPressureBins, baroPressure
- zBins = baroCorrTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
- table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1
- ; constant, variable
- xBins = ignitionRpmBins, rpm
- yBins = ignitionLoadBins, engineLoad
- zBins = ignitionTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
- table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1
- ; constant, variable
- xBins = ignitionIatCorrRpmBins, rpm
- yBins = ignitionIatCorrLoadBins, intake
- zBins = ignitionIatCorrTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
- table = veTableTbl, veTableMap, "VE Table", 1
- ; constant, variable
- xBins = veRpmBins, rpm
- yBins = veLoadBins, MAPValue
- zBins = veTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
-
- table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1
- ; constant, variable
- xBins = injPhaseRpmBins, rpm
- yBins = injPhaseLoadBins, engineLoad
- zBins = injectionPhase
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(Later)", "(Sooner)"
-
- table = afrTableTbl, afrTableMap, "Target AFR Table", 1
- ; constant, variable
- xBins = afrRpmBins, rpm
- yBins = afrLoadBins, MAPValue
- zBins = afrTable
-; gridHeight = 2.0
- gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
- upDownLabel = "(RICHER)", "(LEANER)"
-
-[GaugeConfigurations]
-
- ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
- tachometer = rpm, "Engine Speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0
-#if CELSIUS
- CLTGauge = coolant, "Coolant Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
-#else
- CLTGauge = coolant, "Coolant Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
-#endif
-#if CELSIUS
- IATGauge = intake, "Intake Air Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
-#else
- IATGauge = intake, "Intake Air Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
-#endif
-#if CELSIUS
- tChargeGauge = tCharge, "Charge Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
-#else
- tChargeGauge = tCharge, "Charge Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
-#endif
-
-
- throttleGauge = TPS, "Throttle Position", "%", 0, 100, 0, 0, 100, 100, 2, 2
- afr1Gauge = AFRactual, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
- mafGaugeVolts = MAF, "Mass Air Flow", "v", 0, 5, 0, 1, 3, 4, 1, 1
- VBattGauge = VBatt, "Battery Voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1
- tpsADCGauge = tpsADC, "tps ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0
- atmPresCGauge = baroPressure, "Baro", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0
- mapGaugeValue = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0
- ignadvGauge = ign_adv, "Ignition Advance 1", "degrees", -100, 100, -999, -999, 999, 999, 1, 1
-; warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
-; accelEnrichGauge = accDecEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
- dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
- egt1Gauge = egt1, "EGT#1", "C", 0, 2000
- egt2Gauge = egt2, "EGT#2", "C", 0, 2000
- egt3Gauge = egt3, "EGT#3", "C", 0, 2000
- egt4Gauge = egt4, "EGT#4", "C", 0, 2000
- egt5Gauge = egt5, "EGT#5", "C", 0, 2000
- egt6Gauge = egt6, "EGT#6", "C", 0, 2000
- egt7Gauge = egt7, "EGT#7", "C", 0, 2000
- egt8Gauge = egt8, "EGT#8", "C", 0, 2000
- vssGauge = vehicleSpeedKph, "Speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1
- rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1
- massAirFlowValueGa = massAirFlowValue,"Air Flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1
- veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1
- baroCorrectionGauge = baroCorrection,"BaroCorr", "%", 0, 120, 10, 10, 100, 100, 1, 1
- pedalPositionGauge = pedalPosition,"Pedal Position", "%", 0, 120, 10, 10, 100, 100, 1, 1
- knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1
- knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2
-
- triggerErrorsCounterGauge = triggerErrorsCounter, "trg err", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0
-
- pulseWidthGauge = pulseWidth, "fuel final squirt, per injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
- baseFuelGauge = baseFuel, "fuel: base duration, before corr", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
- fuelPidCorrectionGauge = fuelPidCorrection, "fuel: closed loop correction", "mSec", -11, 11, 1.0, 1.2, 20, 25, 3, 1
- coilDutyCycleGauge = coilDutyCycle, "dwell: duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1
-
- crankingFuelGauge = crankingFuel, "fuel: crank Width", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
- iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2
- cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2
- injectorDutyCycleGauge=injectorDutyCycle, "fuel: injectorDutyCycle","%", 0, 120, 10, 10, 100, 100, 1, 1
-
- engineLoadDeltaGauge = engineLoadDelta,"fuel: load change","value", 0, 120, 10, 10, 100, 100, 1, 1
- engineLoadAccelExtraGauge = engineLoadAccelExtra,"fuel: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1
- deltaTpsGauge = deltaTps, "fuel: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1
- tpsAccelFuelGauge = tpsAccelFuel,"fuel: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1
- wallFuelAmountGauge = wallFuelAmount, "fuel: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0
- wallFuelCorrectionGauge = wallFuelCorrection, "fuel: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0
-
- curIdlePositionGauge = curIdlePosition, "idle position", "%", 0, 100, 0, 0, 100, 100, 0, 0
-
- debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField2Gauge = debugFloatField2, "debug f2", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField3Gauge = debugFloatField3, "debug f3", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField4Gauge = debugFloatField4, "debug f4", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField5Gauge = debugFloatField5, "debug f5", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField6Gauge = debugFloatField6, "debug f6", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4
- debugIntField1Gauge = debugIntField1, "debug i1", "%", 0, 100, 0, 0, 100, 100, 0, 0
- debugIntField2Gauge = debugIntField2, "debug i2", "%", 0, 100, 0, 0, 100, 100, 0, 0
- debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0
- speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4
- warningCounterGauge = warningCounter, "warn", "", 0, 100, 0, 0, 100, 100, 0, 0
- lastErrorCodeGauge = lastErrorCode, "error", "", 0, 8000, 0, 0, 8000, 8000, 0, 0
- internalMcuTemperatureGauge = internalMcuTemperature, "internal temperature", "C", 0, 100, 0, 0, 100, 100, 0, 0
- vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0
-
-
-[FrontPage]
- ; Gauges are numbered left to right, top to bottom.
- ;
- ; 1 2 3 4
- ; 5 6 7 8
-
- ; currently a minimum of 6 gauges must be on the dash, this appears to be an old not needed limitation. next release 1 will work.
- gauge1 = tachometer
- gauge2 = CLTGauge
- gauge3 = throttleGauge
- gauge4 = mafGaugeVolts
- gauge5 = afr1Gauge
- gauge6 = VBattGauge
- gauge7 = dwellGauge
- gauge8 = ignadvGauge
-
-
-
-; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg
- ; important status
- indicator = { ind_hasFatalError }, "", "FATAL ERROR", green, black, red, black
- indicator = { firmwareTsVersion == fileVersion }, "WRONG VERSION", "version", red, black, green, black
- indicator = { ind_isWarnNow }, "", "warn", green, black, red, black
- indicator = { ind_check_engine }, "ok", "Check engine", green, black, red, black
- indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", red, black, green, black
- indicator = { ind_injection_enabled}, "no injection", "injection", red, black, green, black
- indicator = { ind_isTriggerError}, "ok", "trg err", green, black, red, black
-
-
- ; minor info
- indicator = { ind_fan}, "no fan", "fan", white, black, green, black
- indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, green, black
- indicator = { needBurn }, "no Burn", "Need Burn", white, black, yellow, black
- indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black
- indicator = { ind_fuel_pump}, "no pump", "pump", white, black, green, black
- indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black
- indicator = { clutchDownState }, "clutch", "cltch Down", white, black, red, black
-
- ; error codes
- indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black
- indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black
- indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black
- indicator = { ind_map_error}, "map", "map error", white, black, red, black
-
- indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black
- indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black
-
-
-[Datalog]
- ; Channel Label Type Format
- entry = time, "Time", float, "%.3f"
- entry = rpm, "RPM", int, "%d"
- entry = firmwareVersion, "version", int, "%d"
- entry = coolant, "CLT", float, "%.2f"
- entry = intake, "IAT", float, "%.2f"
- entry = TPS, "TPS", float, "%.2f"
- entry = MAF, "MAF", float, "%.2f"
- entry = MAPValue, "MAP", float, "%.1f"
- entry = AFRactual, "AFR", float, "%.2f"
- entry = VBatt, "vBatt", float, "%.2f"
- entry = engineLoad, "Load", float, "%.1f"
- entry = ign_adv, "ignAdv", float, "%.2f"
- entry = knockLevel, "Knock", float, "%.2f"
- entry = vehicleSpeedKph, "speed", float, "%.2f"
- entry = speedToRpmRatio, "s2rpm", float, "%.3f"
- entry = rpmAcceleration, "dRPM", float, "%.3f"
- entry = massAirFlowValue,"airMass", float, "%.3f"
- entry = pedalPosition, "pedal", float, "%.3f"
- entry = triggerErrorsCounter, "trg err",int, "%d"
- entry = curIdlePosition, "idle position", float, "%.3f"
-
-
- entry = pulseWidth, "fuel: pulse", float, "%.3f"
- entry = baseFuel, "fuel: base", float, "%.2f"
- entry = fuelPidCorrection,"fuel: pid", float, "%.2f"
- entry = veValue, "fuel: VE", float, "%.3f"
- entry = injectorDutyCycle,"fuel: duty cyc",float,"%.3f"
- entry = coilDutyCycle, "dwell: duty", float,"%.3f"
-
- entry = engineLoadAccelExtra, "fuel: load extra",float, "%.3f"
- entry = engineLoadDelta, "fuel: load change",float, "%.3f"
-
- entry = deltaTps, "fuel: TPS change",float, "%.3f"
- entry = tpsAccelFuel, "fuel: TOS enrich", float, "%.3f"
-
- entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f"
- entry = wallFuelAmount, "fuel: wall amount", float, "%.3f"
-
- entry = baroCorrection, "baroCorrection",float,"%.3f"
- entry = iatCorrection, "fuel: IAT corr", float, "%.3f"
- entry = cltCorrection, "cltCorrection", float,"%.3f"
-
- entry = sparkDwellValue, "dwell", float,"%.3f"
- entry = vvtPosition, "VVT", float,"%.2f"
-
-; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d"
-; Alternator_PID: alternator duty cycle
-; DBG_TPS_ACCEL: from TPS
- entry = debugFloatField1, "debug f1",float,"%.4f"
-
-; Alternator_PID: current integration term
-; DBG_TPS_ACCEL: to TPS
- entry = debugFloatField2, "debug f2",float,"%.4f"
-
-; Alternator_PID: previous error
-; DBG_TPS_ACCEL: tps<>tps table value
- entry = debugFloatField3, "debug f3",float,"%.4f"
-
-; Alternator_PID: I setting
-; DBG_TPS_ACCEL: extra fuel
- entry = debugFloatField4, "debug f4",float,"%.4f"
-
-; Alternator_PID: D setting
- entry = debugFloatField5, "debug f5",float,"%.4f"
-
-; Alternator_PID: dTerm
- entry = debugFloatField6, "debug f6",float,"%.4f"
-
- entry = debugFloatField7, "debug f7",float,"%.4f"
-
-
-; Alternator_PID: P setting
- entry = debugIntField1, "debug i1",int,"%d"
-
-; Alternator_PID: offset setting
- entry = debugIntField2, "debug i2",int,"%d"
-
-; Alternator_PID: PID reset counter
- entry = debugIntField3, "debug i3",int,"%d"
-
- entry = engineMode, "mode",int,"%d"
- entry = warningCounter, "err: count",int,"%d"
- entry = lastErrorCode, "err: last",int,"%d"
- entry = internalMcuTemperature, "int temp",float,"%.2f"
-
- entry = tCharge, "tCharge",float,"%.3f"
-
-; tpsADC = U16, "ADC",
-; alignmet = U16, "al",
-; atmPres = F32, "pres",
-; crankingFuel = F32, "ms",
-; tCharge = F32, "T",
-; sparkDwell = F32, "MAP",
-; warmUpEnrich = F32, "%",
-
-[Menu]
-
- menu = "Engine"
- subMenu = engineChars, "Base Engine Settings"
- subMenu = triggerConfiguration, "Trigger Configuration"
- subMenu = std_separator
- subMenu = injectionSettings, "Injection Settings"
- subMenu = ignitionSettings, "Ignition Settings"
- subMenu = std_separator
- subMenu = analogInputs, "Analog inputs"
- subMenu = cltSensor, "CLT Sensor Settings"
- subMenu = iatSensor, "IAT Sensor Settings"
- subMenu = auxTempSensor1Sensor, "AuxTemp1 Sensor Settings"
- subMenu = auxTempSensor2Sensor, "AuxTemp2 Sensor Settings"
- subMenu = mapSettings, "MAP Sensor Settings"
- subMenu = mafDecodingCurve, "MAF Sensor Settings"
- subMenu = egoSettings, "EGO Sensor Settings"
- subMenu = egtInputs, "EGT inputs"
- subMenu = energySystems, "Battery and Alternator Settings"
- subMenu = auxPidDialog, "Aux PID"
- subMenu = speedSensor, "Speed Sensor Settings"
- subMenu = tachSettings, "Tachometer output"
- subMenu = std_separator
- subMenu = fanSetting, "Fan Settings"
- subMenu = idleSettings, "Idle Settings"
- subMenu = mainRealay, "Main Relay Settings"
- subMenu = fuelPump, "Fuel Pump Settings"
- subMenu = malfunction, "MIL Settings"
- subMenu = hipFunction, "hip9011 Settings (knock decoder)"
- subMenu = cj125Function, "CJ125 Settings (wbo decoder)"
- subMenu = spiFunction, "SPI Settings"
- subMenu = etbDialog, "Electronic Thtottle Body (alpha)"
- menu = "Tuning"
- subMenu = generalSettings, "General"
- subMenu = monitoringSettings, "rusEfi Console Settings"
- subMenu = std_separator
- subMenu = crankingDialog, "Cranking"
- subMenu = crankingCltCurve, "Cranking Coolant Temp Multiplier"
- subMenu = crankingTpsCurve, "Cranking TPS Multiplier"
- subMenu = crankingDurationCurve, "Cranking Duration Multiplier"
- subMenu = std_separator
- subMenu = warmupFuelDialog, "Warmup fuel closed-loop"
- subMenu = cltFuelCorrCurve, "Warmup fuel manual Multiplier", 0, {useWarmupPidAfr == 0}
- subMenu = warmupTargetAfrCurve, "Warmup fuel auto correction AFR target", 0, {useWarmupPidAfr == 1}
- subMenu = cltIdleCurve, "Warmup IAC position manual Multiplier"
- subMenu = cltTimingCorrCurve, "Warmup timing correction"
- subMenu = std_separator
- subMenu = fuelTableTbl, "Fuel Table", 0, {fuelAlgorithm != 3}
- subMenu = veTableTbl, "VE Table", 0, {fuelAlgorithm == 3}
- subMenu = afrTableTbl, "Targe AFR Table", 0, {fuelAlgorithm == 3}
- subMenu = iatFuelCorrCurve, "Intake air temperature fuel Multiplier"
- subMenu = injPhaseTableTbl, "Injection Phase"
- subMenu = mapAccelTaper, "Engine Load Acceleration Enrichment Taper"
- subMenu = std_separator
- subMenu = fuelClosedLoopDialog, "Fuel closed-loop correction"
- subMenu = AccelEnrich, "Accel/Decel Enrichment/Enleanment"
- subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration Multiplier"
- subMenu = std_separator
- subMenu = ignitionTableTbl, "Ignition Table"
- subMenu = ignitionIatCorrTableTbl, "Ignition Intake Air Temp correction"
- subMenu = baroCorrTbl, "Baro Correction", 0, {fuelAlgorithm == 3}
- subMenu = std_separator
- subMenu = std_realtime, "&Realtime Display", 0
- subMenu = tChargeSettings, "tCharge Settings"
-
- menu = "3D Map Tuning"
-; subMenu = std_realtime, "Realtime Display"
-; subMenu = std_warmup, "Warmup Wizard"
- subMenu = fuelTableMap, "Fuel Table", 0, {fuelAlgorithm != 3}
- subMenu = veTableMap, "VE Table", 0, {fuelAlgorithm == 3}
- subMenu = afrTableMap, "Targe AFR Table", 0, {fuelAlgorithm == 3}
- subMenu = injPhaseTableMap, "Injection Phase"
- subMenu = ignitionTableMap, "Ignition Table"
- subMenu = ignitionIatCorrTableMap, "Ignition Intake Air Temp correction"
-
- menu = "Racing Features"
- subMenu = smLaunchControl, "Launch Control"
- subMenu = std_separator
-
- menu = "Board"
- subMenu = fsioInputsDialog, "FSIO inputs"
- subMenu = fsioOutputsDialog, "FSIO outputs"
- subMenu = fsioTable1Tbl, "FSIO Table #1"
- subMenu = fsioTable2Tbl, "FSIO Table #2"
- subMenu = fsioTable3Tbl, "FSIO Table #3"
- subMenu = fsioTable4Tbl, "FSIO Table #4"
- subMenu = std_separator
- subMenu = connection, "Connection"
- subMenu = joystickPanel, "Joystick"
- subMenu = std_separator
- subMenu = ioTest, "I-O Test"
- subMenu = ecuStimulator, "ECU stimulator"
- subMenu = allPins, "Full pinout"
-
-[ControllerCommands]
-; commandName = command1, command2, commandn...
-; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order.
-; This does not include any resultant protocol envelope data, only the response data itself.
-
-; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands
-; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition
-; and may create error messages.
-; It is expected that these commands would not typically alter any ram mapped to a Constant.
-
-cmd_test_spk1 = "w\x00\x12\x00\x01"
-cmd_test_spk2 = "w\x00\x12\x00\x02"
-cmd_test_spk3 = "w\x00\x12\x00\x03"
-cmd_test_spk4 = "w\x00\x12\x00\x04"
-cmd_test_spk5 = "w\x00\x12\x00\x05"
-cmd_test_spk6 = "w\x00\x12\x00\x06"
-cmd_test_spk7 = "w\x00\x12\x00\x07"
-cmd_test_spk8 = "w\x00\x12\x00\x08"
-cmd_test_spk9 = "w\x00\x12\x00\x09"
-cmd_test_spk10 = "w\x00\x12\x00\x0a"
-cmd_test_spk11 = "w\x00\x12\x00\x0b"
-cmd_test_spk12 = "w\x00\x12\x00\x0c"
-cmd_test_spk13 = "w\x00\x12\x00\x0d"
-cmd_test_spk14 = "w\x00\x12\x00\x0e"
-cmd_test_spk15 = "w\x00\x12\x00\x0f"
-cmd_test_spk16 = "w\x00\x12\x00\x10"
-
-
-cmd_test_inj1 = "w\x00\x13\x00\x01"
-cmd_test_inj2 = "w\x00\x13\x00\x02"
-cmd_test_inj3 = "w\x00\x13\x00\x03"
-cmd_test_inj4 = "w\x00\x13\x00\x04"
-cmd_test_inj5 = "w\x00\x13\x00\x05"
-cmd_test_inj6 = "w\x00\x13\x00\x06"
-cmd_test_inj7 = "w\x00\x13\x00\x07"
-cmd_test_inj8 = "w\x00\x13\x00\x08"
-cmd_test_inj9 = "w\x00\x13\x00\x09"
-cmd_test_inj10 = "w\x00\x13\x00\x0a"
-cmd_test_inj11 = "w\x00\x13\x00\x0b"
-cmd_test_inj12 = "w\x00\x13\x00\x0c"
-cmd_test_inj13 = "w\x00\x13\x00\x0d"
-cmd_test_inj14 = "w\x00\x13\x00\x0e"
-cmd_test_inj15 = "w\x00\x13\x00\x0f"
-cmd_test_inj16 = "w\x00\x13\x00\x10"
-
-cmd_test_fuel_pump = "w\x00\x14\x00\x01"
-cmd_test_radiator_fan = "w\x00\x15\x00\x01"
-cmd_test_check_engine_light = "w\x00\x16\x00\x01"
-cmd_test_idle_valve = "w\x00\x17\x00\x01"
-
-
-[UserDefined]
- dialog = tChargeSettings, "tChart Settings"
- field = "MinRpm MinTps", tChargeMinRpmMinTps
- field = "MinRpm MaxTps", tChargeMinRpmMaxTps
- field = "MaxRpm MinTps", tChargeMaxRpmMinTps
- field = "MaxRpm MaxTps", tChargeMaxRpmMaxTps
-
- dialog = baseInjection, "Injection"
- field = "Enabled", isInjectionEnabled
- field = "Mode", injectionMode, {isInjectionEnabled == 1}
- field = "#Batch injection with individual wiring"
- field = "Two wire batch", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2}
-
- dialog = baseIgnition, "Ignition"
- field = "Enabled", isIgnitionEnabled
- field = "Mode", ignitionMode, {isIgnitionEnabled == 1}
- field = "#Wasted spark with individual coils"
- field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2}
- field = "Timing Mode", timingMode, {isIgnitionEnabled == 1}
- field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1}
-
-
-; Engine->Base Engine Settings
- dialog = engineChars, "Base Engine Settings"
-; field = "Engine Preset", engineType
- field = "Number of Cylinders", cylindersCount
- field = "Engine Displacement", displacement
- field = "debug fields", debugMode
- field = ""
- field = "Firing Order", firingOrder
- panel = baseInjection
- panel = baseIgnition
-
-; Engine->Trigger configuration
- dialog = triggerConfiguration_settings, "Settings Trigger"
- field = "Trigger type", trigger_type
- field = "Operation mode", operationMode
- field = "With VR sensors only rising edge has reliable position"
- field = "use only rising edge", useOnlyRisingEdgeForTrigger
- field = "Trigger Angle Offset", globalTriggerAngleOffset
- field = "#Custom Trigger"
- field = "total Tooth Count", trigger_customTotalToothCount, {trigger_type == 0}
- field = "skipped Tooth Count", trigger_customSkippedToothCount, {trigger_type == 0}
-
- dialog = triggerConfiguration_IO, "Settings I/O"
- field = "!ECU reboot needed to apply pin assignment"
- field = "#Cam is primary if you have cam sensor"
- field = "Primary input channel", triggerInputPins1
- field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20}
- field = "Cam Sync/VVT input", camInput
- field = "VVT mode", vvtMode, {trigger_type != 80}
- field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80}
- field = "VVT position display offset", vvtOffset
- field = "VVT display inverted", vvtDisplayInverted
- field = "NB2 from temp", nb2ratioFrom
- field = "NB2 to temp", nb2ratioTo
- field = "nbVvtIndex", nbVvtIndex
- field = "Trigger error LED", triggerErrorPin
- field = "Trigger error LED mode", triggerErrorPinMode
- field = "print sync details to console", isPrintTriggerSynchDetails
- dialog = triggerConfiguration
- panel = triggerConfiguration_settings, North
- panel = triggerConfiguration_IO, South
-
-; Engine->Injection Settings
- dialog = injChars, "Injector Settings", yAxis
- field = "Injector Flow", injector_flow
- field = "phase offset", extraInjectionOffset
-
- dialog = injIO, "Injector Output", yAxis
- field = "!ECU reboot needed to apply these settings"
- field = "injection Pin Mode", injectionPinMode
- field = "Injection Pin 1", injectionPins1
- field = "Injection Pin 2", injectionPins2, {cylindersCount > 1}
- field = "Injection Pin 3", injectionPins3, {cylindersCount > 2}
- field = "Injection Pin 4", injectionPins4, {cylindersCount > 3}
- field = "Injection Pin 5 ", injectionPins5, {cylindersCount > 4}
- field = "Injection Pin 6 ", injectionPins6, {cylindersCount > 5}
- field = "Injection Pin 7 ", injectionPins7, {cylindersCount > 6}
- field = "Injection Pin 8 ", injectionPins8, {cylindersCount > 7}
- field = "Injection Pin 9 ", injectionPins9, {cylindersCount > 8}
- field = "Injection Pin 10 ", injectionPins10, {cylindersCount > 9}
- field = "Injection Pin 11 ", injectionPins11, {cylindersCount > 10}
- field = "Injection Pin 12 ", injectionPins12, {cylindersCount > 11}
-
- dialog = injectorSetting, "", yAxis
- panel = injChars, North
- panel = injIO, East
-
- dialog = injectionSettings, "", xAxis
- panel = injectorSetting, West
- panel = injectorsDeadTime, East
-
- dialog = ignitionCylExtra, "Ignition Cyliner Extra"
- field = "Extra cyl #1", timing_offset_cylinder1
- field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1}
- field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2}
- field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3}
- field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4}
- field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5}
- field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6}
- field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7}
- field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8}
- field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9}
- field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10}
- field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11}
-
-
-; Engine->Ignition Settings
- dialog = ignitionOutputs, "Ignition Outputs"
- field = "Ignition Pin Mode", ignitionPinMode
- field = "Ignition Pin 1", ignitionPins1
- field = "Ignition Pin 2", ignitionPins2, {(ignitionMode != 0 && cylindersCount > 1) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12)))}
- field = "Ignition Pin 3", ignitionPins3, {(ignitionMode != 0 && cylindersCount > 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9)))}
- field = "Ignition Pin 4", ignitionPins4, {(ignitionMode != 0 && cylindersCount > 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12)))}
- field = "Ignition Pin 5", ignitionPins5, {(ignitionMode != 0 && cylindersCount > 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12)))}
- field = "Ignition Pin 6", ignitionPins6, {(ignitionMode != 0 && cylindersCount > 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 )}
- field = "Ignition Pin 7", ignitionPins7, {(ignitionMode != 0 && cylindersCount > 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11)))}
- field = "Ignition Pin 8", ignitionPins8, {(ignitionMode != 0 && cylindersCount > 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
- field = "Ignition Pin 9", ignitionPins9, {(ignitionMode != 0 && cylindersCount > 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
- field = "Ignition Pin 10", ignitionPins10, {(ignitionMode != 0 && cylindersCount > 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
- field = "Ignition Pin 11", ignitionPins11, {(ignitionMode != 0 && cylindersCount > 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
- field = "Ignition Pin 12", ignitionPins12, {(ignitionMode != 0 && cylindersCount > 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
- field = "This is useful to have tachometer working while converting from distributor"
- field = "Dizzy out Pin", dizzySparkOutputPin
- field = "Dizzy out Pin Mode", dizzySparkOutputPinMode
-
- dialog = ignitionSettings, "", xAxis
- panel = ignitionOutputs, West
- panel = dwellCorrection, Center
- panel = ignitionCylExtra, East
-
-; Engine->Aux1 Thermistor Settings
- dialog = auxTempSensor1_thermistor, "aux1 Thermistor Settings"
- field = "!Here is three pairs of thermistor temperature and his resistance."
- field = "!Typical temperatures is -40°C, 0°C and 100°C"
- field = ""
- field = "Lowest temperature", auxTempSensor1_tempC_1
- field = "Resistance @ LT", auxTempSensor1_resistance_1
- field = ""
- field = "Middle temperature", auxTempSensor1_tempC_2
- field = "Resistance @ MT", auxTempSensor1_resistance_2
- field = ""
- field = "Highest temperature", auxTempSensor1_tempC_3
- field = "Resistance @ HT", auxTempSensor1_resistance_3
- dialog = auxTempSensor1Sensor_IO, "auxTempSensor1 Sensor I/O"
- field = "auxTempSensor1 ADC input", auxTempSensor1_adcChannel
- field = "Bias Resistor Value", auxTempSensor1_bias_resistor
- dialog = auxTempSensor1Sensor, "", yAxis
- panel = auxTempSensor1_thermistor, North
- panel = auxTempSensor1Sensor_IO, South
-
-; Engine->Aux2 Thermistor Settings
- dialog = auxTempSensor2_thermistor, "aux1 Thermistor Settings"
- field = "!Here is three pairs of thermistor temperature and his resistance."
- field = "!Typical temperatures is -40°C, 0°C and 100°C"
- field = ""
- field = "Lowest temperature", auxTempSensor2_tempC_1
- field = "Resistance @ LT", auxTempSensor2_resistance_1
- field = ""
- field = "Middle temperature", auxTempSensor2_tempC_2
- field = "Resistance @ MT", auxTempSensor2_resistance_2
- field = ""
- field = "Highest temperature", auxTempSensor2_tempC_3
- field = "Resistance @ HT", auxTempSensor2_resistance_3
- dialog = auxTempSensor2Sensor_IO, "auxTempSensor2 Sensor I/O"
- field = "auxTempSensor2 ADC input", auxTempSensor2_adcChannel
- field = "Bias Resistor Value", auxTempSensor2_bias_resistor
- dialog = auxTempSensor2Sensor, "", yAxis
- panel = auxTempSensor2_thermistor, North
- panel = auxTempSensor2Sensor_IO, South
-
-
- dialog = allPins1
- field = "MAP ADC input", map_sensor_hwChannel
- field = "frequencyReportingMapInputPin", frequencyReportingMapInputPin
- field = "CLT ADC input", clt_adcChannel
- field = "IAT ADC input", iat_adcChannel
- field = "vBatt ADC input", vbattAdcChannel
- field = "TPS ADC input", tpsAdcChannel
- field = "MAF ADC input", mafAdcChannel
- field = "AFR ADC input", afr_hwChannel
- field = "fuelLevelSensor", fuelLevelSensor
- field = "Baro ADC input", baroSensor_hwChannel
- field = "pedal Position Channel", pedalPositionChannel
- field = "Primary input channel", triggerInputPins1
- field = "Secondary channel", triggerInputPins2
- field = "Cam Sync/VVT input", camInput
- field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin
- field = "clutchDownPin", clutchDownPin
- field = "clutchUpPin", clutchUpPin
-
- dialog = allPins2
- field = "Tachometer output Pin", tachOutputPin
- field = "Dizzy out Pin", dizzySparkOutputPin
- field = "O2 heater pin", o2heaterPin
- field = "Idle Solenoid Pin", idle_solenoidPin
- field = "Idle Stepper Dir", idle_stepperDirectionPin
- field = "Idle Stepper Step", idle_stepperStepPin
- field = "Idle Stepper Enable", stepperEnablePin
- field = "Fuel Pump Pin", fuelPumpPin
- field = "ETB Dir #1", etbDirectionPin1
- field = "ETB Dir #2", etbDirectionPin2
- field = "ETB Control #1", etbControlPin1
- field = "ETB Control #2", etbControlPin2
- field = "SD CS Pin", sdCardCsPin
- field = "Check Engine Pin", malfunctionIndicatorPin
-
- dialog = allPins3
- field = "Injection Pin 1", injectionPins1
- field = "Injection Pin 2", injectionPins2
- field = "Injection Pin 3", injectionPins3
- field = "Injection Pin 4", injectionPins4
- field = "Injection Pin 5 ", injectionPins5
- field = "Injection Pin 6 ", injectionPins6
- field = "Injection Pin 7 ", injectionPins7
- field = "Injection Pin 8 ", injectionPins8
- field = "Injection Pin 9 ", injectionPins9
- field = "Injection Pin 10 ", injectionPins10
- field = "Injection Pin 11 ", injectionPins11
- field = "Injection Pin 12 ", injectionPins12
-
- field = "Ignition Pin 1", ignitionPins1
- field = "Ignition Pin 2", ignitionPins2
- field = "Ignition Pin 3", ignitionPins3
- field = "Ignition Pin 4", ignitionPins4
- field = "Ignition Pin 5", ignitionPins5
- field = "Ignition Pin 6", ignitionPins6
- field = "Ignition Pin 7", ignitionPins7
- field = "Ignition Pin 8", ignitionPins8
- field = "Ignition Pin 9", ignitionPins9
- field = "Ignition Pin 10", ignitionPins10
- field = "Ignition Pin 11", ignitionPins11
- field = "Ignition Pin 12", ignitionPins12
-
- dialog = allPins4
- field = "FSIO dig inp #1", fsioDigitalInputs1
- field = "FSIO dig inp #2", fsioDigitalInputs2
- field = "FSIO dig inp #3", fsioDigitalInputs3
- field = "FSIO dig inp #4", fsioDigitalInputs4
- field = "FSIO dig inp #5", fsioDigitalInputs5
- field = "FSIO dig inp #6", fsioDigitalInputs6
- field = "FSIO dig inp #7", fsioDigitalInputs7
- field = "FSIO dig inp #8", fsioDigitalInputs8
- field = "FSIO dig inp #9", fsioDigitalInputs9
-
-
-
- dialog = allPins1_2, "", xAxis
- panel = allPins1
- panel = allPins2
-
- dialog = allPins3_4, "", xAxis
- panel = allPins3
- panel = allPins4
-
- dialog = allPins, "All Pins", xAxis
- panel = allPins1_2
- panel = allPins3_4
-
-
-; Engine->CLT Thermistor Settings
- dialog = clt_thermistor, "CLT Thermistor Settings"
- field = "!Here is three pairs of thermistor temperature and his resistance."
- field = "!Typical temperatures is -40°C, 0°C and 100°C"
- field = ""
- field = "Lowest temperature", clt_tempC_1
- field = "Resistance @ LT", clt_resistance_1
- field = ""
- field = "Middle temperature", clt_tempC_2
- field = "Resistance @ MT", clt_resistance_2
- field = ""
- field = "Highest temperature", clt_tempC_3
- field = "Resistance @ HT", clt_resistance_3
- dialog = cltSensor_IO, "CLT Sensor I/O"
- field = "CLT ADC input", clt_adcChannel
- field = "Bias Resistor Value", clt_bias_resistor
- dialog = cltSensor, "", yAxis
- panel = clt_thermistor, North
- panel = cltSensor_IO, South
-
-; Engine->IAT Thermistor Settings
- dialog = iat_thermistor, "IAT Thermistor Settings"
- field = "!Here is three pairs of thermistor temperature and his resistance."
- field = "!Typical temperatures is -40°C, 0°C and 100°C"
- field = ""
- field = "Lowest temperature", iat_tempC_1
- field = "Resistance @ LT", iat_resistance_1
- field = ""
- field = "Middle temperature", iat_tempC_2
- field = "Resistance @ MT", iat_resistance_2
- field = ""
- field = "Highest temperature", iat_tempC_3
- field = "Resistance @ HT", iat_resistance_3
- dialog = iatSensor_IO, "IAT Sensor I/O"
- field = "IAT ADC input", iat_adcChannel
- field = "Bias Resistor Value", iat_bias_resistor
- dialog = iatSensor, "", yAxis
- panel = iat_thermistor, North
- panel = iatSensor_IO, South
-
-; Engine->MAP Sensor Settings
- dialog = mapSensorVDlg, "Voltage Sensor Settings", xAxis
- field = "MAP ADC input", map_sensor_hwChannel, {hasFrequencyReportingMapSensor == 0}
- field = "Map type", map_sensor_type, {hasFrequencyReportingMapSensor == 0}
- field = "MAP value low point", map_sensor_lowValue, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
- field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
- field = "MAP value high point", map_sensor_highValue, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
- field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
-
- dialog = mapSensorFDlg, "Frequency Sensor Settings", xAxis
- field = "pin", frequencyReportingMapInputPin, {hasFrequencyReportingMapSensor == 1}
- field = "0 kPa freq", mapFrequency0Kpa, {hasFrequencyReportingMapSensor == 1}
- field = "100 kpa freq", mapFrequency100Kpa, {hasFrequencyReportingMapSensor == 1}
-
- dialog = mapCurves, "", border
- panel = map_samplingAngleCurve, West
- panel = map_samplingWindowCurve, East
-
- dialog = mapSwitch, "MAP input type"
- field = "frequency-based MAP", hasFrequencyReportingMapSensor
-
- dialog = mapVandF, "V and F"
- panel = mapSensorVDlg, North
- panel = mapSensorFDlg, South
-
- dialog = mapSwitchAndSettings, "Switch and Settings"
- field = "!ECU reboot needed to apply pin assignment"
- panel = mapSwitch, North
- panel = mapVandF, South
-
- dialog = mapSettings, "MAP Sensor Settings", border
- panel = mapCurves, North
- panel = mapSwitchAndSettings, South
-
-; Engine->EGO Sensor Settings
- dialog = egoSettings_sensor, "EGO Sensor Settings"
- field = "low voltage", afr_v1
- field = "low value", afr_value1
- field = "high voltage", afr_v2
- field = "high value", afr_value2
- field = "Correction", egoValueShift
- dialog = egoSettings_IO, "EGO Sensor I/O"
- field = "AFR ADC input", afr_hwChannel
- field = "O2 heater pin", o2heaterPin
- dialog = egoSettings, "", yAxis
- panel = egoSettings_sensor, North
- panel = egoSettings_IO, South
-
-; Engine->EGT inputs
- dialog = egtInputs, "EGT inputs"
- field = "SPI", max31855spiDevice
- field = "CS #1", max31855_cs1
- field = "CS #2", max31855_cs2
- field = "CS #3", max31855_cs3
- field = "CS #4", max31855_cs4
- field = "CS #5", max31855_cs5
- field = "CS #6", max31855_cs6
- field = "CS #7", max31855_cs7
- field = "CS #8", max31855_cs8
-
-; Engine->idle Settings
- dialog = idleSolenoid, "solenoid"
- field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle
- field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle
- field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle
-
- dialog = idleStepper, "stepper"
- field = "Idle Stepper Step", idle_stepperStepPin, useStepperIdle
- field = "Idle Stepper Dir", idle_stepperDirectionPin, useStepperIdle
- field = "Idle Stepper Enable", stepperEnablePin, useStepperIdle
- field = "Idle Stepper Enable mode", stepperEnablePinMode, useStepperIdle
- field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle
- field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle
-
- dialog = idleType, "Type idle valve", border
- panel = idleSolenoid, West
- panel = idleStepper, East
-
- dialog = idleSettings, "", yAxis
- field = "Manual mode", idleMode
- field = "Cranking Extra", crankingIdleAdjustment
- field = "Auto target", targetIdleRpm, { idleMode == 0}
- field = "idle P", idleRpmPid_pFactor
- field = "idle I", idleRpmPid_iFactor
- field = "idle D", idleRpmPid_dFactor
- field = "idle offset", idleRpmPid_offset
- slider = "Manual Idle Position", manIdlePosition, horizontal
- field = ""
- field = "use stepper", useStepperIdle
- panel = idleType
-
-; Engine->Fan Settings
- dialog = fanSetting, "Fan Settings"
- field = "Fan On Temperature", fanOnTemperature
- field = "Fan Off Temperature", fanOffTemperature
- field = ""
- field = "!ECU reboot needed to apply these settings"
- field = "Fan Pin Mode", fanPinMode
- field = "Fan Pin", fanPin
-
-; Engine->Main Relay Settings
- dialog = mainRealay, "Main Relay Settings"
- field = "!ECU reboot needed to apply these settings"
- field = "Main Relay Mode", mainRelayPinMode
- field = "Main Relay Pin", mainRelayPin
-
-; Engine->Fuel Pump Settings
- dialog = fuelPump, "Fuel Pump Settings"
- field = "!ECU reboot needed to apply these settings"
- field = "Fuel Pump Pin Mode", fuelPumpPinMode
- field = "Fuel Pump Pin", fuelPumpPin
-
-; Engine->MIL Settings
- dialog = malfunction, "Check Engine Settings"
- field = "!ECU reboot needed to apply these settings"
- field = "Check Engine Pin Mode", malfunctionIndicatorPinMode
- field = "Check Engine Pin", malfunctionIndicatorPin
- field = "Warning Period", warningPeriod
-
-; Engine->hip9011 Settings
- dialog = hipFunction, "HIP9011 Settings (knock decoder)"
- field = "Enabled", isHip9011Enabled
- field = "Threshold", knockVThreshold, {isHip9011Enabled == 1}
- field = "!ECU reboot needed to apply these settings"
- field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1}
- field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1}
- field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1}
- field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1}
- field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1}
- field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1}
- field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1}
- field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1}
- field = "SPI2sck", spi2SckMode, {isHip9011Enabled == 1}
- field = "SPI2mosi", spi2MosiMode, {isHip9011Enabled == 1}
- field = "SPI2miso", spi2MisoMode, {isHip9011Enabled == 1}
- panel = knockThresholdCurve
-
-; Engine->cj125 Settings
- dialog = cj125Function, "CJ125 Settings (wbo decoder)"
- field = "Enabled", isCJ125Enabled
- field = "!ECU reboot needed to apply these settings"
- field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1}
- field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1}
- field = "SPI device", cj125SpiDevice
- field = "UA input", cj125ua, {isCJ125Enabled == 1}
- field = "UR input", cj125ur, {isCJ125Enabled == 1}
-
- dialog = spiFunction, "SPI settings"
- field = "!ECU reboot needed to apply these settings"
- field = "SPI1 enable", is_enabled_spi_1
- field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1}
- field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1}
- field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1}
- field = "SPI2 enable", is_enabled_spi_2
- field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1}
- field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1}
- field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1}
- field = "SPI3 enable", is_enabled_spi_3
- field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1}
- field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1}
- field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1}
-
- dialog = fuelClosedLoopDialog, "Fuel closed-loop correction"
- field = "Enabled", fuelClosedLoopCorrectionEnabled
- field = "!No correction below these value"
- field = "CLT - low threshod", fuelClosedLoopCltThreshold, {fuelClosedLoopCorrectionEnabled == 1}
- field = "RPM - low threshod", fuelClosedLoopRpmThreshold, {fuelClosedLoopCorrectionEnabled == 1}
- field = "EGO - low threshod", fuelClosedLoopAfrLowThreshold, {fuelClosedLoopCorrectionEnabled == 1}
- field = "!No correction above these value"
- field = "TPS - high threshod", fuelClosedLoopTpsThreshold, {fuelClosedLoopCorrectionEnabled == 1}
- field = "EGO - high threshod", fuelClosedLoopAfrHighThreshold, {fuelClosedLoopCorrectionEnabled == 1}
- field = "!PID settings"
- field = "P factor", fuelClosedLoopPid_pFactor, {fuelClosedLoopCorrectionEnabled == 1}
- field = "I factor", fuelClosedLoopPid_iFactor, {fuelClosedLoopCorrectionEnabled == 1}
- field = "D factor", fuelClosedLoopPid_dFactor, {fuelClosedLoopCorrectionEnabled == 1}
-
-
- dialog = auxPidDialog, "Aux PID"
- field = "Enabled", activateAuxPid1
- field = "FSIO pin #1", auxPidPins1
- field = "PWM Frequency", auxPidFrequency1
- field = "verbose", isVerboseAuxPid1
- field = "#target based on FSIO map#1"
- field = "control period", auxPidDT1, {activateAuxPid1 == 1}
- field = "#PID control"
- field = "offset", auxPid1_offset, {activateAuxPid1 == 1}
- field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1}
- field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1}
- field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1}
- field = "FSIO pin #2", auxPidPins2
- field = "FSIO pin #3", auxPidPins3
- field = "FSIO pin #4", auxPidPins4
-
-; Engine->Battery & Alternator
- dialog = batteryDialog, "Battery Settings", yAxis
- field = "vBatt ADC input", vbattAdcChannel
- field = "Battery Input Divider Coefficient", vbattDividerCoeff
- dialog = alternator, "Alternator Settings", yAxis
- field = "Enabled", isAlternatorControlEnabled
- field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1}
- field = "Target", targetVBatt, {isAlternatorControlEnabled == 1}
- field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1}
- field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1}
- field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
- field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1}
- field = "Verbose", isVerboseAlternator, {isAlternatorControlEnabled == 1}
- field = "control period", alternatorDT, {isAlternatorControlEnabled == 1}
- field = "#PID control"
- field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
- field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
- field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
- field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
- field = "#% duty = Pterm + Iterm + Dterm + offset%"
-
-
- dialog = warmupFuelDialog, "Warmup fuel closed-loop", yAxis
- field = "use automatic Pid Afr control", useWarmupPidAfr
- field = "warmup temperature Threshold", warmupAfrThreshold
- field = "wa offset", warmupAfrPid_offset
- field = "wa P factor", warmupAfrPid_pFactor
- field = "wa I factor", warmupAfrPid_iFactor
- field = "wa D factor", warmupAfrPid_dFactor
- field = "#correction = Pterm + Iterm + Dterm + offset"
-
-
- dialog = energySystems, "Battery and Alternator Settings", yAxis
- panel = batteryDialog
- panel = alternator
-
-; Engine->Speed Sensor
- dialog = speedSensor, "Speed Sensor Settings"
- field = "Input pin", vehicleSpeedSensorInputPin
- field = "revolution to speed mult", vehicleSpeedCoef
-
-; Engine->Other inputs
- dialog = analogInputs, "Analog inputs"
- field = "!ECU reboot needed to apply these settings"
- field = "TPS ADC input", tpsAdcChannel
- field = "TPS low value detection threshold", tpsErrorDetectionTooLow
- field = "TPS high value detection threshold", tpsErrorDetectionTooHigh
- field = "!todo: move MAF channel to maf curve dialog"
- field = "MAF ADC input", mafAdcChannel
- field = "Baro ADC input", baroSensor_hwChannel
- field = "Analog divider", analogInputDividerCoefficient
- field = "Use BiQuad averaging", useBiQuadAnalogFiltering
- field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0}
- field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1}
- field = "Bi_Q a1", biQuad_a1, {useBiQuadAnalogFiltering == 1}
- field = "Bi_Q a2", biQuad_a2, {useBiQuadAnalogFiltering == 1}
- field = "Bi_Q b1", biQuad_b1, {useBiQuadAnalogFiltering == 1}
- field = "Bi_Q b2", biQuad_b2, {useBiQuadAnalogFiltering == 1}
-
- dialog = tachSettings, "Tachometer output"
- field = "!See also dizzySparkOutputPin"
- field = "pin", tachOutputPin
- field = "pin mode", tachOutputPinMode
- field = "rise at trigger index", tachPulseTriggerIndex
- field = "pulse duration", tachPulseDuractionMs
-
-
-; Board->Connection
- dialog = tsPort, "TunerStudio Port"
- field = "startConsoleInBinaryMode", startConsoleInBinaryMode
- field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed
- field = "Use PC10/PC11 serial?", useSerialPort
- field = "startConsoleInBinaryMode", startConsoleInBinaryMode
-
- dialog = canBus, "CAN Bus"
- field = "Can Read Enabled", canReadEnabled
- field = "Can Write Enabled", canWriteEnabled
-; field = "Can Nbc Type", canNbcType
- field = "Can Sleep Period", canSleepPeriod
- field = "TX pin", canTxPin
- field = "RX pin", canRxPin
-
- dialog = sdCard, "SD Card Logger"
- field = "SdCard", isSdCardEnabled
- field = "CS Pin", sdCardCsPin
- field = "log format", logFormat
- field = "Mass Storage", storageMode
-
- dialog = gpsReceiver, "GPS Receiver"
- field = "gps RX", gps_rx_pin
- field = "gps TX", gps_tx_pin
-
- dialog = lcdScreen, "LCD screen"
- field = "display Mode", displayMode
- field = "height", HD44780height
- field = "width", HD44780width
- field = "RS pin", HD44780_rs
- field = "E pin", HD44780_e
- field = "D4 pin", HD44780_db4
- field = "D5 pin", HD44780_db5
- field = "D6 pin", HD44780_db6
- field = "D7 pin", HD44780_db7
-
- dialog = connectRight, "", yAxis
- panel = tsPort
- panel = canBus
- panel = sdCard
- panel = gpsReceiver
-
- dialog = connection, "", border
- panel = lcdScreen, East
- panel = connectRight, West
-
- dialog = joystickPanel, "Joystick"
- field = "joustick center button", joystickCenterPin
- field = "joustick button A", joystickAPin
- field = "joustick button B", joystickBPin
- field = "joustick button C", joystickCPin
- field = "joustick button D", joystickDPin
-
- dialog = monitoringSettings, "rusEfi Console Settings"
- field = "Sensor Sniffer", sensorChartMode
- field = " Threshold", sensorSnifferRpmThreshold
- field = " Each X cycle", sensorChartFrequency
- field = "Engine Sniffer", isEngineChartEnabled
- field = " Threshold", engineSnifferRpmThreshold
-
-
-
-; Tuning->General
- dialog = generalSettings, "General"
- field = "RPM Hard Limit", rpmHardLimit
- field = "Boost Cut Pressure", boostCutPressure
- field = ""
- field = "Fuel Algorithm", fuelAlgorithm
- field = ""
- field = "#System hack's"
- field = "Global fuel correction", globalFuelCorrection
- field = "Ignition Math Logic @", ignMathCalculateAtIndex
- field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex
- field = "comm status pin", communicationPin
- field = "running status", runningPin
-
- dialog = crankingFuel, "Fuel"
- field = "Injection Mode", crankingInjectionMode
- field = "Base Fuel Pulse Width", cranking_baseFuel
-
-
- dialog = crankingIgnition, "Ignition"
- field = "Advance", crankingTimingAngle
- field = "Use fixed Dwell?", useConstantDwellDuringCranking
- field = "Fixed Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1}
- field = "Charge Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0}
-
- dialog = postCrankingEnrichment, "Post-cranking short-time fuel enrichment"
- field = "Target temperature", postCrankingTargetClt
- field = "Post-Cranking factor", postCrankingFactor
- field = "Duraction", postCrankingDurationSec
-
-
-; Tuning->Cranking
- dialog = crankingDialog, "Cranking"
- field = "Cranking RPM limit", cranking_rpm
- panel = crankingFuel
- panel = crankingIgnition
- panel = postCrankingEnrichment
- field = ""
- field = ""
- field = "enable Cylinder Cleanup", isCylinderCleanupEnabled
-
-
- dialog = EngineLoadAccelPanel, "Engine Load"
- field = "Length", engineLoadAccelLength
- field = "Accel Threshold", engineLoadAccelEnrichmentThreshold
- field = "Accel Multiplier", engineLoadAccelEnrichmentMultiplier
- field = "Decel Threshold", engineLoadDecelEnleanmentThreshold
- field = "Decel Multiplier", engineLoadDecelEnleanmentMultiplier
-
- dialog = TpsAccelPanel, "TPS"
- field = "Length", tpsAccelLength
- field = "Accel Threshold", tpsAccelEnrichmentThreshold
- field = "Decel Threshold", tpsDecelEnleanmentThreshold
-; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier
-
-; Tuning->AccelEnrichment
- dialog = AccelEnrich, "Accel/Decel Enrichment"
- panel = EngineLoadAccelPanel
- panel = TpsAccelPanel
- field = "sucked off wall coefficient", suckedOffCoef
- field = "added to wall coef", addedToWallCoef
-
-
-; Flex Logic
- dialog = fsioIO, "Outputs"
- field = "output #1", fsioPins1
- field = "output #2", fsioPins2
- field = "output #3", fsioPins3
- field = "output #4", fsioPins4
- field = "output #5", fsioPins5
- field = "output #6", fsioPins6
- field = "output #7", fsioPins7
- field = "output #8", fsioPins8
- field = "output #9", fsioPins9
- field = "output #10", fsioPins10
- field = "output #11", fsioPins11
- field = "output #12", fsioPins12
- field = "output #13", fsioPins13
- field = "output #14", fsioPins14
- field = "output #15", fsioPins15
- field = "output #16", fsioPins16
- field = ""
- field = ""
-
- dialog = fsioFrequency, "Frequency"
- field = "freq #1", fsioFrequency1
- field = "freq #2", fsioFrequency2
- field = "freq #3", fsioFrequency3
- field = "freq #4", fsioFrequency4
- field = "freq #5", fsioFrequency5
- field = "freq #6", fsioFrequency6
- field = "freq #7", fsioFrequency7
- field = "freq #8", fsioFrequency8
- field = "freq #9", fsioFrequency9
- field = "freq #10", fsioFrequency10
- field = "freq #11", fsioFrequency11
- field = "freq #12", fsioFrequency12
- field = "freq #13", fsioFrequency13
- field = "freq #14", fsioFrequency14
- field = "freq #15", fsioFrequency15
- field = "freq #16", fsioFrequency16
- field = ""
- field = ""
-
- dialog = fsioSetting, "Setting"
- field = "Set number is not associated with the output number."
- field = "Set number, only the cell number with some numbers."
- field = "set #1", fsio_setting1
- field = "set #2", fsio_setting2
- field = "set #3", fsio_setting3
- field = "set #4", fsio_setting4
- field = "set #5", fsio_setting5
- field = "set #6", fsio_setting6
- field = "set #7", fsio_setting7
- field = "set #8", fsio_setting8
- field = "set #9", fsio_setting9
- field = "set #10", fsio_setting10
- field = "set #11", fsio_setting11
- field = "set #12", fsio_setting12
- field = "set #13", fsio_setting13
- field = "set #14", fsio_setting14
- field = "set #15", fsio_setting15
- field = "set #16", fsio_setting16
-
- dialog = fsioOutputsDialog, "FSIO outputs", border
- panel = fsioIO, West
- panel = fsioFrequency, Center
- panel = fsioSetting, East
-
-
- dialog = fsioInputsDialog, "FSIO inputs"
- field = "ADC #1", fsioAdc1
- field = "ADC #2", fsioAdc2
- field = "ADC #3", fsioAdc3
- field = "ADC #4", fsioAdc4
-
- dialog = etbDialog, "Electronic Thtottle Body (alpha)"
- field = "pedal Position Channel", pedalPositionChannel
- field = "Pedal min", pedalPositionMin
- field = "Pedal max", pedalPositionMax
- field = "PWM Frequency", etbFreq
- field = "Dir #1", etbDirectionPin1
- field = "Dir #2", etbDirectionPin2
- field = "Control #1", etbControlPin1
- field = "Control #2", etbControlPin2
-
- dialog = testSpark, "Spark"
- commandButton = "Spark #1", cmd_test_spk1
- commandButton = "Spark #2", cmd_test_spk2
- commandButton = "Spark #3", cmd_test_spk3
- commandButton = "Spark #4", cmd_test_spk4
- commandButton = "Spark #5", cmd_test_spk5
- commandButton = "Spark #6", cmd_test_spk6
- commandButton = "Spark #7", cmd_test_spk7
- commandButton = "Spark #8", cmd_test_spk8
-
- dialog = testInjectors, "Fuel"
- commandButton = "Injector #1", cmd_test_inj1
- commandButton = "Injector #2", cmd_test_inj2
- commandButton = "Injector #3", cmd_test_inj3
- commandButton = "Injector #4", cmd_test_inj4
- commandButton = "Injector #5", cmd_test_inj5
- commandButton = "Injector #6", cmd_test_inj6
- commandButton = "Injector #7", cmd_test_inj7
- commandButton = "Injector #8", cmd_test_inj8
-
- dialog = testMisc, "Misc"
- commandButton = "Fuel Pump", cmd_test_fuel_pump
- commandButton = "Radiator Fan", cmd_test_radiator_fan
- commandButton = "Check Engine", cmd_test_check_engine_light
- commandButton = "Idle Air Valve", cmd_test_idle_valve
-
- dialog = ioTest, "I-O Test", border
- panel = testSpark, West
- panel = testInjectors, Center
- panel = testMisc, East
-
-
-; Board->ECU stimulator
- dialog = ecuStimulator, "ECU stimulator"
- field = "Trigger Simulator", triggerSimulatorFrequency
- field = "self-stimulation", directSelfStimulation
- field = ""
- field = "digipot spi", digitalPotentiometerSpiDevice
- field = "digipot CS #0", digitalPotentiometerChipSelect1
- field = "digipot CS #1", digitalPotentiometerChipSelect2
- field = "digipot CS #2", digitalPotentiometerChipSelect3
- field = "digipot CS #3", digitalPotentiometerChipSelect4
- field = ""
- field = "trigger stimulator pin #1", triggerSimulatorPins1
- field = "trigger stimulator pin #2", triggerSimulatorPins2
- field = "trigger stimulator pin #3", triggerSimulatorPins3
- field = ""
- field = "Logic input channel 1", logicAnalyzerPins1
- field = "Logic input channel 2", logicAnalyzerPins2
- field = "Logic input channel 3", logicAnalyzerPins3
- field = "Logic input channel 4", logicAnalyzerPins4
- field = ""
- field = "Engine chart size", engineChartSize
-
- ; Racing Features->Launch Control
- dialog = smLaunchControl, "Launch Control Settings"
- field = "RPM Step1 Limit", step1rpm
- field = "Launch RPM Window" step1RpmWindow
- field = "Step1 Ignition Advance", step1timing
- field = "Use Spark Cut", step1SparkCutEnable
- field = "Use Fuel Cut", step1fuelCutEnable
- field = "clutchDownPin", clutchDownPin
- field = "clutchUpPin", clutchUpPin
-
+; this is TunerStudio project for www.rusefi.com DIY engine management system
+
+; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly.
+enable2ndByteCanID = false
+
+#unset tuneByMAF
+
+[TunerStudio]
+ queryCommand = "S"
+ signature = "MShift v0.02" ; signature is expected to be 7 or more characters.
+
+[Constants]
+; new packet serial format with CRC
+ messageEnvelopeFormat = msEnvelope_1.0
+
+ endianness = little
+ nPages = 1
+
+
+ pageIdentifier = "\x00\x00"
+ pageReadCommand = "R\x00\x00%2o%2c"
+ burnCommand = "B\x00\x00"
+ pageActivate = "P\x00\x00"
+ pageValueWrite = "W\x00\x00%2o%v"
+ pageChunkWrite = "C\x00\x00%2o%2c%v"
+; crc32CheckCommand = "k%2i%2o\xB8\x36"
+ crc32CheckCommand = "k\x00\x00\x00\x00\x36\xB8"
+
+;communication settings
+ pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/
+;e.g. put writeblocks off and add an interwrite delay
+ writeBlocks = on
+ interWriteDelay = 10
+ blockReadTimeout = 3000; Milliseconds general timeout
+
+ blockingFactor = 400 ; max chunk size
+;end communication settings
+
+ ; name = bits, type, offset, bits
+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
+
+; see PAGE_0_SIZE in C source code
+; CONFIG_DEFINITION_START
+; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 12 16:30:23 EDT 2017
+
+pageSize = 16376
+page = 1
+ engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB"
+ engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0
+ injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 1000, 2
+;skipping injector_unusedlag offset 12
+ injector_battLagCorrBins = array, F32, 16, [8], "V", 1, 0, 0.0, 20.0, 2
+ injector_battLagCorr = array, F32, 48, [8], "ms/V", 1, 0, 0.0, 50.0, 2
+ directSelfStimulation = bits, U32, 80, [0:0], "false", "true"
+ activateAuxPid1 = bits, U32, 80, [1:1], "false", "true"
+ isVerboseAuxPid1 = bits, U32, 80, [2:2], "false", "true"
+ activateAuxPid2 = bits, U32, 80, [3:3], "false", "true"
+ isVerboseAuxPid2 = bits, U32, 80, [4:4], "false", "true"
+ activateAuxPid3 = bits, U32, 80, [5:5], "false", "true"
+ isVerboseAuxPid3 = bits, U32, 80, [6:6], "false", "true"
+ activateAuxPid4 = bits, U32, 80, [7:7], "false", "true"
+ isVerboseAuxPid4 = bits, U32, 80, [8:8], "false", "true"
+ useBiQuadAnalogFiltering= bits, U32, 80, [9:9], "false", "true"
+ issue_294_10 = bits, U32, 80, [10:10], "false", "true"
+ issue_294_11 = bits, U32, 80, [11:11], "false", "true"
+ issue_294_12 = bits, U32, 80, [12:12], "false", "true"
+ issue_294_13 = bits, U32, 80, [13:13], "false", "true"
+ issue_294_14 = bits, U32, 80, [14:14], "false", "true"
+ issue_294_15 = bits, U32, 80, [15:15], "false", "true"
+ issue_294_16 = bits, U32, 80, [16:16], "false", "true"
+ issue_294_17 = bits, U32, 80, [17:17], "false", "true"
+ issue_294_18 = bits, U32, 80, [18:18], "false", "true"
+ issue_294_19 = bits, U32, 80, [19:19], "false", "true"
+ issue_294_21 = bits, U32, 80, [20:20], "false", "true"
+ issue_294_22 = bits, U32, 80, [21:21], "false", "true"
+ issue_294_23 = bits, U32, 80, [22:22], "false", "true"
+ issue_294_24 = bits, U32, 80, [23:23], "false", "true"
+ issue_294_25 = bits, U32, 80, [24:24], "false", "true"
+ issue_294_26 = bits, U32, 80, [25:25], "false", "true"
+ issue_294_27 = bits, U32, 80, [26:26], "false", "true"
+ issue_294_28 = bits, U32, 80, [27:27], "false", "true"
+ issue_294_29 = bits, U32, 80, [28:28], "false", "true"
+ tpsMin = scalar, S16, 84, "ADC", 1, 0, 0, 1023, 0
+ tpsMax = scalar, S16, 86, "ADC", 1, 0, 0, 1023, 0
+ tpsErrorDetectionTooLow = scalar, S16, 88, "%", 1, 0, -40, 200, 0
+ tpsErrorDetectionTooHigh = scalar, S16, 90, "%", 1, 0, -40, 200, 0
+ cranking_baseFuel = scalar, F32, 92, "ms", 1, 0, 0, 200, 1
+ cranking_rpm = scalar, S16, 96, "RPM", 1, 0, 0, 3000, 0
+;skipping cranking_alignmentFill offset 98
+ primingSquirtDurationMs = scalar, F32, 100, "*C", 1, 0, -40, 200, 1
+ ignitionDwellForCrankingMs = scalar, F32, 104, "ms", 1, 0, 0, 200, 1
+ crankingChargeAngle = scalar, F32, 108, "deg", 1, 0, 0, 3000.0, 0
+ map_samplingAngleBins = array, F32, 112, [8], "RPM", 1, 0, 0.0, 18000, 2
+ map_samplingAngle = array, F32, 144, [8], "deg", 1, 0, 0.0, 90, 2
+ map_samplingWindowBins = array, F32, 176, [8], "RPM", 1, 0, 0.0, 18000, 2
+ map_samplingWindow = array, F32, 208, [8], "deg", 1, 0, 0.0, 90, 2
+ map_sensor_lowValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2
+ map_sensor_highValue = scalar, F32, 244, "kpa", 1, 0, -400, 800, 2
+ map_sensor_type = bits, U32, 248, [0:2] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "INVALID"
+ map_sensor_hwChannel = bits, U32, 252, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ clt_tempC_1 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1
+ clt_tempC_2 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1
+ clt_tempC_3 = scalar, F32, 264, "*C", 1, 0, -40, 200, 1
+ clt_resistance_1 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1
+ clt_resistance_2 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1
+ clt_resistance_3 = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1
+ clt_bias_resistor = scalar, F32, 280, "Ohm", 1, 0, 0, 200000, 1
+ clt_adcChannel = bits, U32, 284, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ iat_tempC_1 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1
+ iat_tempC_2 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1
+ iat_tempC_3 = scalar, F32, 296, "*C", 1, 0, -40, 200, 1
+ iat_resistance_1 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1
+ iat_resistance_2 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1
+ iat_resistance_3 = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1
+ iat_bias_resistor = scalar, F32, 312, "Ohm", 1, 0, 0, 200000, 1
+ iat_adcChannel = bits, U32, 316, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ step1rpm = scalar, S32, 320, "rpm", 1, 0, 0, 20000.0, 2
+ step1timing = scalar, S32, 324, "deg", 1, 0, -180, 180, 2
+ hip9011PrescalerAndSDO = scalar, S32, 328, "integer", 1, 0.0, 0.0, 32, 0
+ knockBandCustom = scalar, F32, 332, "kHz", 1, 0.0, 0.0, 10.0, 2
+ sparkDwellRpmBins = array, F32, 336, [8], "RPM", 1, 0.0, 0.0, 18000, 2
+ sparkDwellValues = array, F32, 368, [8], "ms", 1, 0.0, 0.0, 30.0, 2
+ displacement = scalar, F32, 400, "L", 1, 0, 0, 1000.0, 2
+ cylindersCount = bits, U32, 404, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID"
+ firingOrder = bits, U32, 408, [0:4], "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", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "fo16", "fo17", "INVALID"
+ cylinderBore = scalar, F32, 412, "mm", 1, 0, 0, 20000.0, 2
+ sensorSnifferRpmThreshold = scalar, S32, 416, "RPM", 1, 0, 0,30000, 0
+ rpmHardLimit = scalar, S32, 420, "rpm", 1, 0, 0, 20000.0, 2
+ fuelAlgorithm = bits, U32, 424, [0:1], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY"
+ crankingInjectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "INVALID"
+ injectionMode = bits, U32, 432, [0:1], "Simultaneous", "Sequential", "Batch", "INVALID"
+ extraInjectionOffset = scalar, F32, 436, "deg", 1, 0.0, -720, 720, 2
+ crankingTimingAngle = scalar, F32, 440, "deg", 1, 0.0, -360, 360, 2
+ ignitionMode = bits, U32, 444, [0:1], "One coil", "Individual Coils", "Wasted", "INVALID"
+ ignitionOffset = scalar, F32, 448, "RPM", 1, 0, 0, 3000.0, 0
+ timingMode = bits, U32, 452 [0:0], "dynamic", "fixed"
+ fixedModeTiming = scalar, F32, 456, "RPM", 1, 0, 0, 3000.0, 0
+ globalTriggerAngleOffset = scalar, F32, 460, "deg", 1, 0, -720, 720, 0
+ analogInputDividerCoefficient = scalar, F32, 464, "coef", 1, 0, 0.01, 10.0, 2
+ vbattDividerCoeff = scalar, F32, 468, "coef", 1, 0, 0.01, 99.0, 2
+ vbattAdcChannel = bits, U32, 472, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fanOnTemperature = scalar, F32, 476, "*C", 1, 0, 0, 1000.0, 2
+ fanOffTemperature = scalar, F32, 480, "*C", 1, 0, 0, 1000.0, 2
+ fuelLevelSensor = bits, U32, 484, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vehicleSpeedCoef = scalar, F32, 488, "coef", 1, 0, 0.01, 2000.0, 2
+ canNbcType = bits, U32, 492, [0:1], "BMW", "FIAT", "VAG" , "MAZDA RX8"
+ canSleepPeriod = scalar, S32, 496, "ms", 1, 0, 0, 1000.0, 2
+ operationMode = bits, U32, 500, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank", "INVALID", "INVALID", "INVALID"
+ displayMode = bits, U32, 504, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID"
+ logFormat = bits, U32, 508, [0:0], "native", "Mega Log Viewer"
+ byFirmwareVersion = scalar, S32, 512, "index", 1, 0, 0, 300, 0
+ HD44780width = scalar, S32, 516, "index", 1, 0, 0, 300, 0
+ HD44780height = scalar, S32, 520, "index", 1, 0, 0, 300, 0
+ tpsAdcChannel = bits, U32, 524, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+;skipping overrideCrankingIgnition offset 528
+ sensorChartFrequency = scalar, S32, 532, "index", 1, 0, 0, 300, 0 ; size 4
+ trigger_type = bits, U32, 536, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "trg39", "trg40", "trg41", "trg42", "INVALID"
+ trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 540, [0:0], "false", "true"
+ trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 540, [1:1], "false", "true"
+ trigger_useOnlyFirstChannel= bits, U32, 540, [2:2], "false", "true"
+ trigger_customTotalToothCount = scalar, S32, 544, "number", 1, 0.0, 0, 500.0, 0
+ trigger_customSkippedToothCount = scalar, S32, 548, "number", 1, 0.0, 0, 500.0, 0
+ trigger_unusedcustomSyncRatioFrom = scalar, F32, 552, "number", 1, 0.0, 0, 1000.0, 4
+ trigger_unusedcustomSyncRatioTo = scalar, F32, 556, "number", 1, 0.0, 0, 1000.0, 4
+ trigger_unusedcustomUseRiseEdge = bits, U32, 560, [0:0], "false", "true"
+ hip9011SpiDevice = bits,U32, 564, [0:1], "Off", "SPI1", "SPI2", "SPI3"
+ globalFuelCorrection = scalar, F32, 568, "coef", 1, 0.0, 0, 1000.0, 2
+ pedalPositionMin = scalar, S16, 572, "ADC", 1, 0, 0, 1023, 0
+ pedalPositionMax = scalar, S16, 574, "ADC", 1, 0, 0, 1023, 0
+;skipping maxKnockSubDeg offset 576
+ mafAdcChannel = bits, U32, 580, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ afr_hwChannel = bits, U32, 584, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ afr_v1 = scalar, F32, 588, "volts", 1, 0.0, 0, 10.0, 2
+ afr_value1 = scalar, F32, 592, "AFR", 1, 0.0, 0, 1000.0, 2
+ afr_v2 = scalar, F32, 596, "volts", 1, 0.0, 0, 10.0, 2
+ afr_value2 = scalar, F32, 600, "AFR", 1, 0.0, 0, 1000.0, 2
+ pedalPositionChannel = bits, U32, 604, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ baroSensor_lowValue = scalar, F32, 608, "kpa", 1, 0, -400, 800, 2
+ baroSensor_highValue = scalar, F32, 612, "kpa", 1, 0, -400, 800, 2
+ baroSensor_type = bits, U32, 616, [0:2] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "INVALID"
+ baroSensor_hwChannel = bits, U32, 620, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ idle_solenoidPin = bits, U32, 624, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ idle_solenoidPinMode = bits, U32, 628, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ idle_solenoidFrequency = scalar, S32, 632, "Hz", 1, 0, 0, 3000, 0
+ idle_stepperDirectionPin = bits, U32, 636, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ idle_stepperStepPin = bits, U32, 640, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ manIdlePosition = scalar, F32, 644, "%", 1, 0, 0, 100, 0
+ fuelPumpPin = bits, U32, 648, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fuelPumpPinMode = bits, U32, 652, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ injectionPins1 = bits, U32, 656, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins2 = bits, U32, 660, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins3 = bits, U32, 664, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins4 = bits, U32, 668, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins5 = bits, U32, 672, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins6 = bits, U32, 676, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins7 = bits, U32, 680, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins8 = bits, U32, 684, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins9 = bits, U32, 688, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins10 = bits, U32, 692, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins11 = bits, U32, 696, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPins12 = bits, U32, 700, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ injectionPinMode = bits, U32, 704, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ ignitionPins1 = bits, U32, 708, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins2 = bits, U32, 712, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins3 = bits, U32, 716, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins4 = bits, U32, 720, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins5 = bits, U32, 724, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins6 = bits, U32, 728, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins7 = bits, U32, 732, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins8 = bits, U32, 736, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins9 = bits, U32, 740, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins10 = bits, U32, 744, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins11 = bits, U32, 748, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPins12 = bits, U32, 752, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ ignitionPinMode = bits, U32, 756, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ malfunctionIndicatorPin = bits, U32, 760, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ malfunctionIndicatorPinMode = bits, U32, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ fanPin = bits, U32, 768, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fanPinMode = bits, U32, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ mapFrequency0Kpa = scalar, F32, 776, "Hz", 1, 0, 0, 100000, 2
+ mapFrequency100Kpa = scalar, F32, 780, "Hz", 1, 0, 0, 100000, 2
+ clutchDownPin = bits, U32, 784, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ clutchDownPinMode = scalar, F32, 788, "ms", 1, 0, 0, 200, 1
+ alternatorControlPin = bits, U32, 792, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ alternatorControlPinMode = bits, U32, 796, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ HD44780_rs = bits, U32, 800, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ HD44780_e = bits, U32, 804, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ HD44780_db4 = bits, U32, 808, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ HD44780_db5 = bits, U32, 812, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ HD44780_db6 = bits, U32, 816, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ HD44780_db7 = bits, U32, 820, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ gps_rx_pin = bits, U32, 824, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ gps_tx_pin = bits, U32, 828, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerSimulatorFrequency = scalar, S32, 832, "Rpm", 1, 0, 0,30000, 0
+ digitalPotentiometerSpiDevice = bits,U32, 836, [0:1], "Off", "SPI1", "SPI2", "SPI3"
+ digitalPotentiometerChipSelect1 = bits, U32, 840, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ digitalPotentiometerChipSelect2 = bits, U32, 844, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ digitalPotentiometerChipSelect3 = bits, U32, 848, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ digitalPotentiometerChipSelect4 = bits, U32, 852, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ etbDirectionPin1 = bits, U32, 856, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ etbDirectionPin2 = bits, U32, 860, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ etbControlPin1 = bits, U32, 864, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ etbControlPin2 = bits, U32, 868, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ electronicThrottlePin1Mode = bits, U32, 872, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ wboHeaterPin = bits, U32, 876, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ cj125CsPin = bits, U32, 880, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fuelLevelEmptyTankVoltage = scalar, F32, 884, "V", 1, 0, 0,10, 2
+ fuelLevelFullTankVoltage = scalar, F32, 888, "V", 1, 0, 0,10, 2
+ afr_type = bits, S32, 892, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX"
+;skipping etbDT offset 896
+ hip9011CsPinMode = bits, U32, 900, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ tachOutputPin = bits, U32, 904, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ tachOutputPinMode = bits, U32, 908, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ triggerInputPins1 = bits, U32, 912, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ triggerInputPins2 = bits, U32, 916, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ triggerInputPins3 = bits, U32, 920, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ mainRelayPin = bits, U32, 924, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+;skipping idleThreadPeriod offset 928
+;skipping consoleLoopPeriod offset 932
+;skipping lcdThreadPeriod offset 936
+ sdCardCsPin = bits, U32, 940, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+;skipping generalPeriodicThreadPeriod offset 944
+ tunerStudioSerialSpeed = scalar, U32, 948, "BPs", 1, 0, 0,1000000, 0
+ boardTestModeJumperPin = bits, U32, 952, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+;skipping canDeviceMode offset 956
+ canTxPin = bits, U32, 960, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ canRxPin = bits, U32, 964, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerSimulatorPins1 = bits, U32, 968, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerSimulatorPins2 = bits, U32, 972, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerSimulatorPins3 = bits, U32, 976, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerSimulatorPinModes1 = bits, U32, 980, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ triggerSimulatorPinModes2 = bits, U32, 984, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ triggerSimulatorPinModes3 = bits, U32, 988, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ o2heaterPin = bits, U32, 992, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ o2heaterPinModeTodO = bits, U32, 996, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ is_enabled_spi_1 = bits, U32, 1000, [0:0], "false", "true"
+ is_enabled_spi_2 = bits, U32, 1000, [1:1], "false", "true"
+ is_enabled_spi_3 = bits, U32, 1000, [2:2], "false", "true"
+ isSdCardEnabled = bits, U32, 1000, [3:3], "false", "true"
+ isFastAdcEnabled = bits, U32, 1000, [4:4], "false", "true"
+ isEngineControlEnabled = bits, U32, 1000, [5:5], "false", "true"
+ isHip9011Enabled = bits, U32, 1000, [6:6], "false", "true"
+ isVerboseAlternator = bits, U32, 1000, [7:7], "false", "true"
+ useSerialPort = bits, U32, 1000, [8:8], "false", "true"
+ useStepperIdle = bits, U32, 1000, [9:9], "false", "true"
+ enabledStep1Limiter = bits, U32, 1000, [10:10], "false", "true"
+ useTpicAdvancedMode = bits, U32, 1000, [11:11], "false", "true"
+ useLcdScreen = bits, U32, 1000, [12:12], "false", "true"
+ startConsoleInBinaryMode= bits, U32, 1000, [13:13], "false", "true"
+ useWarmupPidAfr = bits, U32, 1000, [14:14], "false", "true"
+ onOffAlternatorLogic = bits, U32, 1000, [15:15], "false", "true"
+ isCJ125Enabled = bits, U32, 1000, [16:16], "false", "true"
+ vvtCamSensorUseRise = bits, U32, 1000, [17:17], "false", "true"
+ logicAnalyzerPins1 = bits, U32, 1004, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ logicAnalyzerPins2 = bits, U32, 1008, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ logicAnalyzerPins3 = bits, U32, 1012, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ logicAnalyzerPins4 = bits, U32, 1016, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+;skipping logicAnalyzerMode offset 1020
+;skipping unrealisticRpmThreashold offset 1024
+ mainRelayPinMode = bits, U32, 1028, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ max31855_cs1 = bits, U32, 1032, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs2 = bits, U32, 1036, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs3 = bits, U32, 1040, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs4 = bits, U32, 1044, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs5 = bits, U32, 1048, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs6 = bits, U32, 1052, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs7 = bits, U32, 1056, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855_cs8 = bits, U32, 1060, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ max31855spiDevice = bits,U32, 1064, [0:1], "Off", "SPI1", "SPI2", "SPI3"
+ fsioPins1 = bits, U32, 1068, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins2 = bits, U32, 1072, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins3 = bits, U32, 1076, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins4 = bits, U32, 1080, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins5 = bits, U32, 1084, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins6 = bits, U32, 1088, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins7 = bits, U32, 1092, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins8 = bits, U32, 1096, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins9 = bits, U32, 1100, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins10 = bits, U32, 1104, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins11 = bits, U32, 1108, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins12 = bits, U32, 1112, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins13 = bits, U32, 1116, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins14 = bits, U32, 1120, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins15 = bits, U32, 1124, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioPins16 = bits, U32, 1128, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ gpioPinModes1 = bits, U32, 1132, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes2 = bits, U32, 1136, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes3 = bits, U32, 1140, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes4 = bits, U32, 1144, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes5 = bits, U32, 1148, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes6 = bits, U32, 1152, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes7 = bits, U32, 1156, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes8 = bits, U32, 1160, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes9 = bits, U32, 1164, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes10 = bits, U32, 1168, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes11 = bits, U32, 1172, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes12 = bits, U32, 1176, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes13 = bits, U32, 1180, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes14 = bits, U32, 1184, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes15 = bits, U32, 1188, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ gpioPinModes16 = bits, U32, 1192, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ consoleUartDevice = bits,U32, 1196, [0:1], "Off", "UART1", "UART2", "UART3"
+;skipping unused77 offset 1200
+;skipping unused78 offset 1204
+ nb2ratioFrom = scalar, F32, 1208, "value", 1, 0, 0, 1000, 5
+ nb2ratioTo = scalar, F32, 1212, "value", 1, 0, 0, 1000, 5
+ triggerErrorPin = bits, U32, 1216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ triggerErrorPinMode = bits, U32, 1220, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ acRelayPin = bits, U32, 1224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ acRelayPinMode = bits, U32, 1228, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ fsioFrequency1 = scalar, U16, 1232, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency2 = scalar, U16, 1234, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency3 = scalar, U16, 1236, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency4 = scalar, U16, 1238, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency5 = scalar, U16, 1240, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency6 = scalar, U16, 1242, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency7 = scalar, U16, 1244, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency8 = scalar, U16, 1246, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency9 = scalar, U16, 1248, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency10 = scalar, U16, 1250, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency11 = scalar, U16, 1252, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency12 = scalar, U16, 1254, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency13 = scalar, U16, 1256, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency14 = scalar, U16, 1258, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency15 = scalar, U16, 1260, "Hz", 1, 0, 0, 3000, 0
+ fsioFrequency16 = scalar, U16, 1262, "Hz", 1, 0, 0, 3000, 0
+ hip9011CsPin = bits, U32, 1264, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ hip9011IntHoldPin = bits, U32, 1268, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ hip9011IntHoldPinMode = bits, U32, 1272, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ fsio_setting1 = scalar, F32, 1276, "Val", 1, 0, 0, 18000, 4
+ fsio_setting2 = scalar, F32, 1280, "Val", 1, 0, 0, 18000, 4
+ fsio_setting3 = scalar, F32, 1284, "Val", 1, 0, 0, 18000, 4
+ fsio_setting4 = scalar, F32, 1288, "Val", 1, 0, 0, 18000, 4
+ fsio_setting5 = scalar, F32, 1292, "Val", 1, 0, 0, 18000, 4
+ fsio_setting6 = scalar, F32, 1296, "Val", 1, 0, 0, 18000, 4
+ fsio_setting7 = scalar, F32, 1300, "Val", 1, 0, 0, 18000, 4
+ fsio_setting8 = scalar, F32, 1304, "Val", 1, 0, 0, 18000, 4
+ fsio_setting9 = scalar, F32, 1308, "Val", 1, 0, 0, 18000, 4
+ fsio_setting10 = scalar, F32, 1312, "Val", 1, 0, 0, 18000, 4
+ fsio_setting11 = scalar, F32, 1316, "Val", 1, 0, 0, 18000, 4
+ fsio_setting12 = scalar, F32, 1320, "Val", 1, 0, 0, 18000, 4
+ fsio_setting13 = scalar, F32, 1324, "Val", 1, 0, 0, 18000, 4
+ fsio_setting14 = scalar, F32, 1328, "Val", 1, 0, 0, 18000, 4
+ fsio_setting15 = scalar, F32, 1332, "Val", 1, 0, 0, 18000, 4
+ fsio_setting16 = scalar, F32, 1336, "Val", 1, 0, 0, 18000, 4
+ spi1mosiPin = bits, U32, 1340, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi1misoPin = bits, U32, 1344, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi1sckPin = bits, U32, 1348, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi2mosiPin = bits, U32, 1352, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi2misoPin = bits, U32, 1356, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi2sckPin = bits, U32, 1360, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi3mosiPin = bits, U32, 1364, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi3misoPin = bits, U32, 1368, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ spi3sckPin = bits, U32, 1372, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+;skipping hip9011Gain offset 1376
+ joystickCenterPin = bits, U32, 1380, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ joystickAPin = bits, U32, 1384, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ joystickBPin = bits, U32, 1388, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ joystickCPin = bits, U32, 1392, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ joystickDPin = bits, U32, 1396, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ sensorChartMode = bits, S32, 1400, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID"
+;skipping mafSensorType offset 1404
+ vehicleSpeedSensorInputPin = bits, U32, 1408, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ clutchUpPin = bits, U32, 1412, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ clutchUpPinMode = scalar, F32, 1416, "ms", 1, 0, 0, 200, 1
+ fsioDigitalInputs1 = bits, U32, 1420, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs2 = bits, U32, 1424, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs3 = bits, U32, 1428, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs4 = bits, U32, 1432, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs5 = bits, U32, 1436, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs6 = bits, U32, 1440, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs7 = bits, U32, 1444, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs8 = bits, U32, 1448, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs9 = bits, U32, 1452, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs10 = bits, U32, 1456, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs11 = bits, U32, 1460, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs12 = bits, U32, 1464, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs13 = bits, U32, 1468, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs14 = bits, U32, 1472, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs15 = bits, U32, 1476, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ fsioDigitalInputs16 = bits, U32, 1480, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ frequencyReportingMapInputPin = bits, U32, 1484, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ vvtDisplayInverted = bits, U32, 1488, [0:0], "false", "true"
+ fuelClosedLoopCorrectionEnabled= bits, U32, 1488, [1:1], "false", "true"
+ unusedBit__5 = bits, U32, 1488, [2:2], "false", "true"
+ unusedBit__6 = bits, U32, 1488, [3:3], "false", "true"
+ useConstantDwellDuringCranking= bits, U32, 1488, [4:4], "false", "true"
+ isEngineChartEnabled = bits, U32, 1488, [5:5], "false", "true"
+ unusedBit_7 = bits, U32, 1488, [6:6], "false", "true"
+ unusedBit__2 = bits, U32, 1488, [7:7], "false", "true"
+ canReadEnabled = bits, U32, 1488, [8:8], "false", "true"
+ canWriteEnabled = bits, U32, 1488, [9:9], "false", "true"
+ unusedBit_123 = bits, U32, 1488, [10:10], "false", "true"
+ unusedbit_9 = bits, U32, 1488, [11:11], "false", "true"
+ unusedbit_10 = bits, U32, 1488, [12:12], "false", "true"
+ isAlternatorControlEnabled= bits, U32, 1488, [13:13], "false", "true"
+ unusedBit__3 = bits, U32, 1488, [14:14], "false", "true"
+ unusedbit_8 = bits, U32, 1488, [15:15], "false", "true"
+ cutFuelOnHardLimit = bits, U32, 1488, [16:16], "false", "true"
+ cutSparkOnHardLimit = bits, U32, 1488, [17:17], "false", "true"
+ step1fuelCutEnable = bits, U32, 1488, [18:18], "false", "true"
+ step1SparkCutEnable = bits, U32, 1488, [19:19], "false", "true"
+ hasFrequencyReportingMapSensor= bits, U32, 1488, [20:20], "false", "true"
+ hipOutputChannel = bits, U32, 1492, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ idleMode = bits, U32, 1496, [0:0], "false", "true"
+ isInjectionEnabled = bits, U32, 1500, [0:0], "false", "true"
+ isIgnitionEnabled = bits, U32, 1500, [1:1], "false", "true"
+ isCylinderCleanupEnabled= bits, U32, 1500, [2:2], "false", "true"
+ secondTriggerChannelEnabled= bits, U32, 1500, [3:3], "false", "true"
+ needSecondTriggerInputDeprecated= bits, U32, 1500, [4:4], "false", "true"
+ isMapAveragingEnabled = bits, U32, 1500, [5:5], "false", "true"
+ anotherUnusedBit1 = bits, U32, 1500, [6:6], "false", "true"
+ anotherUnusedBit2 = bits, U32, 1500, [7:7], "false", "true"
+ isTunerStudioEnabled = bits, U32, 1500, [8:8], "false", "true"
+ isWaveAnalyzerEnabled = bits, U32, 1500, [9:9], "false", "true"
+ anotherUnusedBit212 = bits, U32, 1500, [10:10], "false", "true"
+ isPrintTriggerSynchDetails= bits, U32, 1500, [11:11], "false", "true"
+ isManualSpinningMode = bits, U32, 1500, [12:12], "false", "true"
+ twoWireBatchInjection = bits, U32, 1500, [13:13], "false", "true"
+ useOnlyRisingEdgeForTrigger= bits, U32, 1500, [14:14], "false", "true"
+ twoWireBatchIgnition = bits, U32, 1500, [15:15], "false", "true"
+ engineChartSize = scalar, U32, 1504, "count", 1, 0, 0, 300, 0
+ targetIdleRpm = scalar, S32, 1508, "RPM", 1, 0, 0, 7000, 0
+ acSwitchAdc = bits, U32, 1512, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ignMathCalculateAtIndex = scalar, S32, 1516, "index", 1, 0, 0, 7000, 0
+;skipping acCutoffLowRpm offset 1520
+;skipping acCutoffHighRpm offset 1522
+;skipping acIdleRpmBump offset 1524
+ warningPeriod = scalar, S16, 1526, "seconds", 1, 0, 0, 60, 0
+ vRefAdcChannel = bits, U32, 1528, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+;skipping knockDetectionWindowStart offset 1532
+;skipping knockDetectionWindowEnd offset 1536
+ idleStepperReactionTime = scalar, F32, 1540, "ms", 1, 0, 1, 300, 0
+ knockVThreshold = scalar, F32, 1544, "V", 1, 0, 1, 5, 2
+ fsioInputModes1 = scalar, F32, 1548, "ms", 1, 0, 0, 200, 1
+ fsioInputModes2 = scalar, F32, 1552, "ms", 1, 0, 0, 200, 1
+ fsioInputModes3 = scalar, F32, 1556, "ms", 1, 0, 0, 200, 1
+ fsioInputModes4 = scalar, F32, 1560, "ms", 1, 0, 0, 200, 1
+ fsioInputModes5 = scalar, F32, 1564, "ms", 1, 0, 0, 200, 1
+ fsioInputModes6 = scalar, F32, 1568, "ms", 1, 0, 0, 200, 1
+ fsioInputModes7 = scalar, F32, 1572, "ms", 1, 0, 0, 200, 1
+ fsioInputModes8 = scalar, F32, 1576, "ms", 1, 0, 0, 200, 1
+ fsioInputModes9 = scalar, F32, 1580, "ms", 1, 0, 0, 200, 1
+ fsioInputModes10 = scalar, F32, 1584, "ms", 1, 0, 0, 200, 1
+ fsioInputModes11 = scalar, F32, 1588, "ms", 1, 0, 0, 200, 1
+ fsioInputModes12 = scalar, F32, 1592, "ms", 1, 0, 0, 200, 1
+ fsioInputModes13 = scalar, F32, 1596, "ms", 1, 0, 0, 200, 1
+ fsioInputModes14 = scalar, F32, 1600, "ms", 1, 0, 0, 200, 1
+ fsioInputModes15 = scalar, F32, 1604, "ms", 1, 0, 0, 200, 1
+ fsioInputModes16 = scalar, F32, 1608, "ms", 1, 0, 0, 200, 1
+ externalKnockSenseAdc = bits, U32, 1612, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+;skipping unsed2342342 offset 1616
+ idleStepperTotalSteps = scalar, S32, 1628, "count", 1, 0, 5, 3000, 0
+ stepperEnablePin = bits, U32, 1632, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ noAccelAfterHardLimitPeriodSecs = scalar, F32, 1636, "sec", 1, 0, 0, 60, 0
+ mapAveragingSchedulingAtIndex = scalar, S32, 1640, "index", 1, 0, 0, 7000, 0
+ baroCorrPressureBins = array, F32, 1644, [4], "kPa", 1, 0, 0.0, 200, 2
+ baroCorrRpmBins = array, F32, 1660, [4], "RPM", 1, 0, 0.0, 18000, 2
+ baroCorrTable = array, F32, 1676, [4x4],"%", 1, 0, 0, 999.0, 2
+ spi2SckMode = bits, U32, 1740, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
+ spi2MosiMode = bits, U32, 1744, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
+ spi2MisoMode = bits, U32, 1748, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
+ crankingTpsCoef = array, F32, 1752, [8], "%", 1, 0, 0.0, 700.0, 2
+ crankingTpsBins = array, F32, 1784, [8], "%", 1, 0, 0.0, 100.0, 2
+ tachPulseDuractionMs = scalar, F32, 1816, "ms", 1, 0, 0.0, 100.0, 2
+ tachPulseTriggerIndex = scalar, S32, 1820, "index", 1, 0, 0.0, 360.0, 0
+ suckedOffCoef = scalar, F32, 1824, "%", 1, 0, 0.0, 300.0, 2
+ unused71 = array, F32, 1828, [7],
+ addedToWallCoef = scalar, F32, 1856, "%", 1, 0, 0.0, 300.0, 2
+ unused72 = array, F32, 1860, [7],
+ mapErrorDetectionTooLow = scalar, F32, 1888, "kPa", 1, 0, -100.0, 100.0, 2
+ mapErrorDetectionTooHigh = scalar, F32, 1892, "kPa", 1, 0, -100.0, 800.0, 2
+ step1RpmWindow = scalar, S32, 1896, "rpm", 1, 0, 0, 3000.0, 2
+ idleRpmPid_pFactor = scalar, F32, 1900, "value", 1, 0, -1000, 1000, 5
+ idleRpmPid_iFactor = scalar, F32, 1904, "value", 1, 0, -1000, 1000, 5
+ idleRpmPid_dFactor = scalar, F32, 1908, "value", 1, 0, -1000, 1000, 5
+ idleRpmPid_offset = scalar, F32, 1912, "value", 1, 0, 0, 1000, 3
+;skipping idleDT offset 1916
+;skipping idleControl offset 1920
+ communicationPin = bits, U32, 1924, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ runningPin = bits, U32, 1928, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ binarySerialTxPin = bits, U32, 1932, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ binarySerialRxPin = bits, U32, 1936, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ consoleSerialTxPin = bits, U32, 1940, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ consoleSerialRxPin = bits, U32, 1944, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ knockNoise = array, F32, 1948, [8], "v", 1, 0, 0.0, 10, 2
+ knockNoiseRpmBins = array, F32, 1980, [8], "RPM", 1, 0, 0.0, 18000, 2
+ etb_pFactor = scalar, F32, 2012, "value", 1, 0, -1000, 1000, 5
+ etb_iFactor = scalar, F32, 2016, "value", 1, 0, -1000, 1000, 5
+ etb_dFactor = scalar, F32, 2020, "value", 1, 0, -1000, 1000, 5
+ etb_offset = scalar, F32, 2024, "value", 1, 0, 0, 1000, 3
+ cltIdleRpmBins = array, F32, 2028, [16], "C", 1, 0, -100.0, 250.0, 2
+ cltIdleRpm = array, F32, 2092, [16], "RPM", 1, 0, 0.0, 400.0, 0
+ targetVBatt = scalar, F32, 2156, "Volts", 1, 0, 0,30, 1
+ alternatorOffAboveTps = scalar, F32, 2160, "%", 1, 0, 0, 200, 2
+ alternatorDT = scalar, S32, 2164, "ms", 1, 0, 0, 3000, 0
+ alternatorControl_pFactor = scalar, F32, 2168, "value", 1, 0, -1000, 1000, 5
+ alternatorControl_iFactor = scalar, F32, 2172, "value", 1, 0, -1000, 1000, 5
+ alternatorControl_dFactor = scalar, F32, 2176, "value", 1, 0, -1000, 1000, 5
+ alternatorControl_offset = scalar, F32, 2180, "value", 1, 0, 0, 1000, 3
+ tpsAccelLength = scalar, S32, 2184, "cycles", 1, 0, 1, 200, 0
+ tpsAccelEnrichmentThreshold = scalar, F32, 2188, "roc", 1, 0, 0, 200, 3
+ vvtOffset = scalar, F32, 2192, "value", 1, 0, -720, 1000, 5
+ engineLoadAccelLength = scalar, S32, 2196, "cycles", 1, 0, 1, 200, 0
+ engineLoadDecelEnleanmentThreshold = scalar, F32, 2200, "roc", 1, 0, 0, 200, 3
+ engineLoadDecelEnleanmentMultiplier = scalar, F32, 2204, "coeff", 1, 0, 0, 200, 3
+ engineLoadAccelEnrichmentThreshold = scalar, F32, 2208, "roc", 1, 0, 0, 200, 3
+ engineLoadAccelEnrichmentMultiplier = scalar, F32, 2212, "coeff", 1, 0, 0, 200, 3
+ fatalErrorPin = bits, U32, 2216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ warninigPin = bits, U32, 2220, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ configResetPin = bits, U32, 2224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ uartConsoleSerialSpeed = scalar, U32, 2228, "BPs", 1, 0, 0,1000000, 0
+ tpsDecelEnleanmentThreshold = scalar, F32, 2232, "roc", 1, 0, 0, 200, 3
+ tpsDecelEnleanmentMultiplier = scalar, F32, 2236, "coeff", 1, 0, 0, 200, 3
+ slowAdcAlpha = scalar, F32, 2240, "coeff", 1, 0, 0, 200, 3
+ debugMode = bits, U32, 2244, [0:3], "Alternator_PID", "TPS accel enrich", "Warmup PID", "IDLE", "EL accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT PID", "Cranking", "Timing", "Closed-loop fuel corr", "VSS", "SD card", "mode14", "mode15"
+ warmupAfrPid_pFactor = scalar, F32, 2248, "value", 1, 0, -1000, 1000, 5
+ warmupAfrPid_iFactor = scalar, F32, 2252, "value", 1, 0, -1000, 1000, 5
+ warmupAfrPid_dFactor = scalar, F32, 2256, "value", 1, 0, -1000, 1000, 5
+ warmupAfrPid_offset = scalar, F32, 2260, "value", 1, 0, 0, 1000, 3
+ warmupTargetAfrBins = array, F32, 2264, [4], "C", 1, 0, -100.0, 250.0, 2
+ warmupTargetAfr = array, F32, 2280, [4], "AFR", 1, 0, 0.0, 20.0, 2
+ warmupAfrThreshold = scalar, F32, 2296, "tempterature", 1, 0, 0, 200, 3
+ boostCutPressure = scalar, F32, 2300, "kPa", 1, 0, 0, 500, 0
+ mapAccelTaperBins = array, F32, 2304, [8], "counter", 1, 0, 0.0, 300, 0
+ mapAccelTaperMult = array, F32, 2336, [8], "mult", 1, 0, 0.0, 300, 2
+ dizzySparkOutputPin = bits, U32, 2368, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ dizzySparkOutputPinMode = bits, U32, 2372, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ fsioAdc1 = bits, U32, 2376, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fsioAdc2 = bits, U32, 2380, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fsioAdc3 = bits, U32, 2384, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fsioAdc4 = bits, U32, 2388, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fixedTiming = scalar, F32, 2392, "deg", 1, 0, -720, 720, 2
+ mapLowValueVoltage = scalar, F32, 2396, "v", 1, 0, 0.0, 10, 2
+ mapHighValueVoltage = scalar, F32, 2400, "v", 1, 0, 0.0, 10, 2
+ egoValueShift = scalar, F32, 2404, "value", 1, 0, -10.0, 10, 2
+ camInput = bits, U32, 2408, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "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", "PC6", "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", "PE5", "PE6", "INVALID", "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"
+ auxPidDT1 = scalar, U32, 2412, "ms", 1, 0, 0, 3000, 0
+ auxPidDT2 = scalar, U32, 2416, "ms", 1, 0, 0, 3000, 0
+ auxPidDT3 = scalar, U32, 2420, "ms", 1, 0, 0, 3000, 0
+ auxPidDT4 = scalar, U32, 2424, "ms", 1, 0, 0, 3000, 0
+ crankingIdleAdjustment = scalar, F32, 2428, "percent", 1, 0, -100.0, 100,
+ tChargeMinRpmMinTps = scalar, F32, 2432, "mult", 1, 0, 0, 3, 4
+ tChargeMinRpmMaxTps = scalar, F32, 2436, "mult", 1, 0, 0, 3, 4
+ tChargeMaxRpmMinTps = scalar, F32, 2440, "mult", 1, 0, 0, 3, 4
+ tChargeMaxRpmMaxTps = scalar, F32, 2444, "mult", 1, 0, 0, 3, 4
+ auxPidPins1 = bits, U32, 2448, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ auxPidPins2 = bits, U32, 2452, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ auxPidPins3 = bits, U32, 2456, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ auxPidPins4 = bits, U32, 2460, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "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"
+ auxPidFrequency1 = scalar, U16, 2464, "Hz", 1, 0, 0, 3000, 0
+ auxPidFrequency2 = scalar, U16, 2466, "Hz", 1, 0, 0, 3000, 0
+ auxPidFrequency3 = scalar, U16, 2468, "Hz", 1, 0, 0, 3000, 0
+ auxPidFrequency4 = scalar, U16, 2470, "Hz", 1, 0, 0, 3000, 0
+ alternatorPwmFrequency = scalar, S32, 2472, "Hz", 1, 0, 0, 3000.0, 0
+ storageMode = bits, U32, 2476, [0:1], "Auto", "Always", "Never"
+ cj125SpiDevice = bits,U32, 2480, [0:1], "Off", "SPI1", "SPI2", "SPI3"
+ cj125CsPinMode = bits, U32, 2484, [0:1], "default", "default inverted", "open collector", "open collector inverted"
+ auxPid1_pFactor = scalar, F32, 2488, "value", 1, 0, -1000, 1000, 5
+ auxPid1_iFactor = scalar, F32, 2492, "value", 1, 0, -1000, 1000, 5
+ auxPid1_dFactor = scalar, F32, 2496, "value", 1, 0, -1000, 1000, 5
+ auxPid1_offset = scalar, F32, 2500, "value", 1, 0, 0, 1000, 3
+ auxPid2_pFactor = scalar, F32, 2504, "value", 1, 0, -1000, 1000, 5
+ auxPid2_iFactor = scalar, F32, 2508, "value", 1, 0, -1000, 1000, 5
+ auxPid2_dFactor = scalar, F32, 2512, "value", 1, 0, -1000, 1000, 5
+ auxPid2_offset = scalar, F32, 2516, "value", 1, 0, 0, 1000, 3
+ auxPid3_pFactor = scalar, F32, 2520, "value", 1, 0, -1000, 1000, 5
+ auxPid3_iFactor = scalar, F32, 2524, "value", 1, 0, -1000, 1000, 5
+ auxPid3_dFactor = scalar, F32, 2528, "value", 1, 0, -1000, 1000, 5
+ auxPid3_offset = scalar, F32, 2532, "value", 1, 0, 0, 1000, 3
+ auxPid4_pFactor = scalar, F32, 2536, "value", 1, 0, -1000, 1000, 5
+ auxPid4_iFactor = scalar, F32, 2540, "value", 1, 0, -1000, 1000, 5
+ auxPid4_dFactor = scalar, F32, 2544, "value", 1, 0, -1000, 1000, 5
+ auxPid4_offset = scalar, F32, 2548, "value", 1, 0, 0, 1000, 3
+ vvtMode = bits, U32, 2552, [0:2], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7"
+ biQuad_a0 = scalar, F32, 2556, "v", 1, 0, -1000, 1000, 9
+ biQuad_a1 = scalar, F32, 2560, "v", 1, 0, -1000, 1000, 9
+ biQuad_a2 = scalar, F32, 2564, "v", 1, 0, -1000, 1000, 9
+ biQuad_b1 = scalar, F32, 2568, "v", 1, 0, -1000, 1000, 9
+ biQuad_b2 = scalar, F32, 2572, "v", 1, 0, -1000, 1000, 9
+ cltTimingBins = array, F32, 2576, [8], "C", 1, 0, -100.0, 250.0, 1
+ cltTimingExtra = array, F32, 2608, [8], "degree", 1, 0, -400.0, 400.0, 0
+ nbVvtIndex = scalar, S32, 2640, "index", 1, 0, 0, 4.0, 0
+;skipping autoTuneCltThreshold offset 2644
+;skipping autoTuneTpsRocThreshold offset 2648
+;skipping autoTuneTpsQuietPeriod offset 2652
+ postCrankingTargetClt = scalar, F32, 2656, "Ñ", 1, 0, 0, 100, 0
+ postCrankingFactor = scalar, F32, 2660, "mult", 1, 0, 0, 100, 4
+ postCrankingDurationSec = scalar, F32, 2664, "seconds", 1, 0, 0, 100, 2
+ auxTempSensor1_tempC_1 = scalar, F32, 2668, "*C", 1, 0, -40, 200, 1
+ auxTempSensor1_tempC_2 = scalar, F32, 2672, "*C", 1, 0, -40, 200, 1
+ auxTempSensor1_tempC_3 = scalar, F32, 2676, "*C", 1, 0, -40, 200, 1
+ auxTempSensor1_resistance_1 = scalar, F32, 2680, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor1_resistance_2 = scalar, F32, 2684, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor1_resistance_3 = scalar, F32, 2688, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor1_bias_resistor = scalar, F32, 2692, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor1_adcChannel = bits, U32, 2696, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ auxTempSensor2_tempC_1 = scalar, F32, 2700, "*C", 1, 0, -40, 200, 1
+ auxTempSensor2_tempC_2 = scalar, F32, 2704, "*C", 1, 0, -40, 200, 1
+ auxTempSensor2_tempC_3 = scalar, F32, 2708, "*C", 1, 0, -40, 200, 1
+ auxTempSensor2_resistance_1 = scalar, F32, 2712, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor2_resistance_2 = scalar, F32, 2716, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor2_resistance_3 = scalar, F32, 2720, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor2_bias_resistor = scalar, F32, 2724, "Ohm", 1, 0, 0, 200000, 1
+ auxTempSensor2_adcChannel = bits, U32, 2728, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fuelClosedLoopCltThreshold = scalar, S16, 2732, "C", 1, 0, 0, 100, 0
+ fuelClosedLoopTpsThreshold = scalar, S16, 2734, "%", 1, 0, 0, 100, 0
+ fuelClosedLoopRpmThreshold = scalar, S16, 2736, "rpm", 1, 0, 0, 5000, 0
+ etbFreq = scalar, S16, 2738, "Hz", 1, 0, 0, 500, 10
+ fuelClosedLoopPid_pFactor = scalar, F32, 2740, "value", 1, 0, -1000, 1000, 5
+ fuelClosedLoopPid_iFactor = scalar, F32, 2744, "value", 1, 0, -1000, 1000, 5
+ fuelClosedLoopPid_dFactor = scalar, F32, 2748, "value", 1, 0, -1000, 1000, 5
+ fuelClosedLoopPid_offset = scalar, F32, 2752, "value", 1, 0, 0, 1000, 3
+ fuelClosedLoopAfrLowThreshold = scalar, F32, 2756, "ratio", 1, 0, 0, 100, 1
+ fuelClosedLoopAfrHighThreshold = scalar, F32, 2760, "ratio", 1, 0, 0, 100, 1
+ stepperEnablePinMode = bits, U32, 2764, [0:5], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "mode12", "mode13", "mode14", "mode15", "mode16", "mode17", "mode18", "mode19", "mode20", "mode21", "mode22", "mode23", "mode24", "mode25", "mode26", "mode27", "mode28", "mode29", "mode30", "mode31", "PULLUP", "mode33", "mode34", "mode35"
+ cj125ua = bits, U32, 2768, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ cj125ur = bits, U32, 2772, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ timing_offset_cylinder1 = scalar, F32, 2776, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder2 = scalar, F32, 2780, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder3 = scalar, F32, 2784, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder4 = scalar, F32, 2788, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder5 = scalar, F32, 2792, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder6 = scalar, F32, 2796, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder7 = scalar, F32, 2800, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder8 = scalar, F32, 2804, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder9 = scalar, F32, 2808, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder10 = scalar, F32, 2812, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder11 = scalar, F32, 2816, "Val", 1, 0, -20000000, 20000000, 1
+ timing_offset_cylinder12 = scalar, F32, 2820, "Val", 1, 0, -20000000, 20000000, 1
+;skipping unused offset 2824
+ le_formulas1 = array, U08, 3048, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas2 = array, U08, 3248, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas3 = array, U08, 3448, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas4 = array, U08, 3648, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas5 = array, U08, 3848, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas6 = array, U08, 4048, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas7 = array, U08, 4248, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas8 = array, U08, 4448, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas9 = array, U08, 4648, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas10 = array, U08, 4848, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas11 = array, U08, 5048, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas12 = array, U08, 5248, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas13 = array, U08, 5448, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas14 = array, U08, 5648, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas15 = array, U08, 5848, [200],"char", 1, 0, 0.0, 3.0, 2
+ le_formulas16 = array, U08, 6048, [200],"char", 1, 0, 0.0, 3.0, 2
+ timingMultiplier = array, U08, 6248, [200],"char", 1, 0, 0.0, 3.0, 2
+ timingAdditive = array, U08, 6448, [200],"char", 1, 0, 0.0, 3.0, 2
+ cltFuelCorrBins = array, F32, 6648, [16], "C", 1, 0, -100.0, 250.0, 2
+ cltFuelCorr = array, F32, 6712, [16], "%", 1, 0, 0.0, 500.0, 2
+ iatFuelCorrBins = array, F32, 6776, [16], "C", 1, 0, -100.0, 250.0, 2
+ iatFuelCorr = array, F32, 6840, [16], "%", 1, 0, 0.0, 500.0, 2
+ crankingFuelCoef = array, F32, 6904, [8], "%", 1, 0, 0.0, 700.0, 2
+ crankingFuelBins = array, F32, 6936, [8], "C", 1, 0, -80.0, 170.0, 2
+ crankingCycleCoef = array, F32, 6968, [8], "%", 1, 0, 0.0, 500.0, 2
+ crankingCycleBins = array, F32, 7000, [8], "counter", 1, 0, -80.0, 170.0, 2
+ cltIdleCorrBins = array, F32, 7032, [16], "C", 1, 0, -100.0, 250.0, 2
+ cltIdleCorr = array, F32, 7096, [16], "%", 1, 0, 0.0, 500.0, 2
+ mafDecoding = array, F32, 7160, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2
+ mafDecodingBins = array, F32, 8184, [256], "V", 1, 0, -5.0, 150.0, 2
+ ignitionIatCorrTable = array, F32, 9208, [16x16],"deg", 1, 0, -720, 720, 2
+ ignitionIatCorrLoadBins = array, F32, 10232, [16], "Temperature", 1, 0.0, 0, 300.0, 2
+ ignitionIatCorrRpmBins = array, F32, 10296, [16], "RPM", 1, 0.0, 0, 18000.0, 2
+ injectionPhase = array, F32, 10360, [16x16],"deg", 1, 0, -720, 720, 2
+ injPhaseLoadBins = array, F32, 11384, [16], "Load", 1, 0.0, 0, 300.0, 2
+ injPhaseRpmBins = array, F32, 11448, [16], "RPM", 1, 0.0, 0, 18000.0, 2
+ fuelTable = array, F32, 11512, [16x16],"ms", 1, 0, 0.0, 300.0, 2
+ fuelLoadBins = array, F32, 12536, [16], "V", 1, 0, 0.0, 300.0, 2
+ fuelRpmBins = array, F32, 12600, [16], "RPM", 1, 0, 0.0, 25500.0, 2
+ ignitionTable = array, F32, 12664, [16x16],"deg", 1, 0, -20, 90, 2
+ ignitionLoadBins = array, F32, 13688, [16], "Load", 1, 0.0, 0, 300.0, 2
+ ignitionRpmBins = array, F32, 13752, [16], "RPM", 1, 0.0, 0, 18000.0, 2
+ veTable = array, F32, 13816, [16x16],"%", 1, 0, 0, 999.0, 2
+ veLoadBins = array, F32, 14840, [16], "%", 1, 0.0, 0, 300.0, 2
+ veRpmBins = array, F32, 14904, [16], "RPM", 1, 0.0, 0, 18000.0, 2
+ afrTable = array, U08, 14968, [16x16],"deg", 0.1, 0, 0, 25.0, 1
+ afrLoadBins = array, F32, 15224, [16], "%", 1, 0.0, 0, 300.0, 2
+ afrRpmBins = array, F32, 15288, [16], "RPM", 1, 0.0, 0, 18000.0, 2
+ tpsTpsAccelTable = array, F32, 15352, [8x8],"value", 1, 0, 0.0, 30000.0, 2
+ tpsTpsAccelFromRpmBins = array, F32, 15608, [8], "from", 1, 0, 0.0, 30000.0, 2
+ tpsTpsAccelToRpmBins = array, F32, 15640, [8], "to", 1, 0, 0.0, 25500.0, 2
+ fsioTable1 = array, F32, 15672, [8x8],"value", 1, 0, 0.0, 30000.0, 2
+ fsioTable1LoadBins = array, F32, 15928, [8], "L", 1, 0, 0.0, 30000.0, 2
+ fsioTable1RpmBins = array, F32, 15960, [8], "RPM", 1, 0, 0.0, 25500.0, 2
+ fsioTable2 = array, U08, 15992, [8x8],"value", 1, 0, 0.0, 255.0, 0
+ fsioTable2LoadBins = array, F32, 16056, [8], "L", 1, 0, 0.0, 255, 0
+ fsioTable2RpmBins = array, F32, 16088, [8], "RPM", 1, 0, 0.0, 25500.0, 2
+ fsioTable3 = array, U08, 16120, [8x8],"value", 1, 0, 0.0, 255.0, 0
+ fsioTable3LoadBins = array, F32, 16184, [8], "L", 1, 0, 0.0, 255, 0
+ fsioTable3RpmBins = array, F32, 16216, [8], "RPM", 1, 0, 0.0, 25500.0, 2
+ fsioTable4 = array, U08, 16248, [8x8],"value", 1, 0, 0.0, 255.0, 0
+ fsioTable4LoadBins = array, F32, 16312, [8], "L", 1, 0, 0.0, 255, 0
+ fsioTable4RpmBins = array, F32, 16344, [8], "RPM", 1, 0, 0.0, 25500.0, 2
+; total TS size = 16376
+[SettingContextHelp]
+ injector_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"
+ directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nPS: Funny name, right? :)"
+ cranking_baseFuel = "Fuel squirt duration while cranking\nA number of curves adjust this value according to CLT/IAT/TPS etc"
+ cranking_rpm = "Cranking mode threshold. Special cranking logic controls fuel and spark while RPM is below this threshold\nset cranking_rpm X"
+ 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.\nset cranking_charge_angle X"
+ knockBandCustom = "kHz knock band override"
+ cylinderBore = "Cylinder diameter, in mm."
+ sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm"
+ fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nset algorithm X"
+ injectionMode = "'batched' means two injectors are wired together\nset injection_mode X"
+ extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?"
+ crankingTimingAngle = "Timing advance while engine cranking\nset cranking_timing_angle X"
+ ignitionMode = "'wasted' means one coil is driving two spark plugs in two cylinders, with one of the aparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X"
+ ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant"
+ fixedModeTiming = "This value is used in 'fixed timing' mode, i.e. constant timing\nThis mode is useful for instance while adjusting distributor location"
+ globalTriggerAngleOffset = "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.\nset global_trigger_offset_angle X"
+ analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB"
+ vbattDividerCoeff = "Battery Voltage input resistor divider coefficient"
+ fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsuis"
+ fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsuis"
+ vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h"
+ trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken"
+ tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin."
+ vvtCamSensorUseRise = "Use rise or fall signal front"
+ sensorChartMode = "rusEfi console Sensor Sniffer mode"
+ isInjectionEnabled = "enable injection"
+ isIgnitionEnabled = "enable ignition"
+ isCylinderCleanupEnabled = "If TPS above 95% no fuel would be injected during cranking\nenable cylinder_cleanup"
+ isPrintTriggerSynchDetails = "enable trigger_details"
+ twoWireBatchInjection = "This is needed if batched injection and individual injector wiring\nenable two_wire_batch_injection"
+ useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front"
+ twoWireBatchIgnition = "This is needed if batched igniton (waster spark) and individual coil wiring"
+ ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback."
+ mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback."
+ tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)"
+ slowAdcAlpha = "ExpAverage alpha coefficient"
+ dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged. See also tachOutputPin"
+
+
+; CONFIG_DEFINITION_END
+
+
+[Tuning]
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ gaugeColumns = 1 ; Only 1 or 2 are valid.
+
+ pageButtons = "&EGO"
+ gauge1 = tachometer
+ gauge2 = afr1Gauge
+ gauge3 = mapGaugeValue
+ gauge4 = veValueGauge
+
+
+[VeAnalyze]
+
+ ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
+#if tuneByMAF
+ veAnalyzeMap = fuelTableTbl, afrTableTbl, AFRactual, egoCorrection, { 1 }
+#else
+ veAnalyzeMap = veTableTbl, afrTableTbl, AFRactual, egoCorrection, { 1 }
+#endif
+ ;lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom
+
+ ; filter = Name, "DisplayName", outputChannel, operator, defaultVal, userAdjustable
+ filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
+
+#if CELSIUS
+ filter = minCltFilter, "Minimum CLT", coolant, < , 60, , true
+#else
+ filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
+#endif
+
+ filter = deltaTps, "dTPS", deltaTps > , 50, , true
+
+ filter = VBatt, "VBatt", VBatt < , 12, , true
+
+; filter = minTps, "Minimum TPS", TPS, > , 1, , true
+
+
+;[VeAnalyze]
+; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRactual, egoCorrection , { 1 }
+; filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
+
+
+
+[OutputChannels]
+
+; see TS_FILE_VERSION in firmware code
+fileVersion = { 20161225 }
+
+ ochGetCommand = "O"
+
+; see TS_OUTPUT_SIZE in console source code
+ ochBlockSize = 356
+
+ rpm = scalar, U32, 0, "RPM", 1, 0.00000
+#if CELSIUS
+ coolant = scalar, F32, 4, "°C", 1, 0.0
+#else
+ coolant = scalar, F32, 4, "°F", {9/5}, 17.77777
+#endif
+#if CELSIUS
+ intake = scalar, F32, 8, "°C", 1, 0.0
+#else
+ intake = scalar, F32, 8, "°F", {9/5}, 17.77777
+#endif
+ TPS = scalar, F32, 12, "%", 1, 0
+ MAF = scalar, F32, 16, "V", 1, 0
+ AFRactual = scalar, F32, 20, "AFR", 1, 0.0
+ engineLoad = scalar, F32, 24, "%", 1, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ VBatt = scalar, F32, 28, "V", 1, 0.0
+ ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale)
+ tpsADC = scalar, U16, 32, "ADC", 1, 0.0;
+ alignmet = scalar, U16, 34, "al", 1, 0.0;
+ baroPressure = scalar, F32, 36, "pres", 1, 0.0;
+ MAPValue = scalar, F32, 40, "MAP", 1, 0.0;
+ ; total fuel squirt duration (in MS) per engine cycle according to current CLT
+ crankingFuel = scalar, F32, 44, "ms", 1, 0.0;
+ baseFuel = scalar, F32, 48, "ms", 1, 0
+ tCharge = scalar, F32, 52, "T", 1, 0.0;
+ ign_adv = scalar, F32, 56, "deg", 1, 0.0;
+ sparkDwellValue = scalar, F32, 60, "ms", 1, 0.0;
+ ; actual total Ms time per engine cycle with all corrections
+ pulseWidth = scalar, F32, 64, "ms", 1, 0.0;
+ debugFloatField1 = scalar, F32, 68, "val", 1, 0.0;
+
+ hasSdCard = bits, U32, 72, [0:0], "true", "false";
+ isIgnitionEnabledIndicator=bits, U32, 72, [1:1], "true", "false";
+ ind_injection_enabled=bits,U32, 72, [2:2], "true", "false";
+ isCylinderCleanupEnabled=bits, U32, 72, [3:3], "true", "false";
+ isCylinderCleanupActivated=bits,U32,72, [4:4], "true", "false";
+ ind_fuel_pump = bits, U32, 72, [5:5], "true", "false";
+ ind_fan = bits, U32, 72, [6:6], "true", "false";
+ ind_o2_heater = bits, U32, 72, [7:7], "true", "false";
+ ind_check_engine= bits, U32, 72, [8:8], "true", "false";
+ needBurn = bits, U32, 72, [9:9], "true", "false";
+ ind_2nd_trigger_en=bits, U32, 72, [10:10], "true", "false";
+ clutchUpState =bits, U32, 72, [11:11], "true", "false";
+ clutchDownState =bits, U32, 72, [12:12], "true", "false";
+ knockEverIndicator=bits, U32, 72, [13:13], "true", "false";
+ knockNowIndicator=bits, U32, 72, [14:14], "true", "false";
+ vehicleSpeedKph = scalar, F32, 76, "kph", 1, 0.0;
+
+ ind_tps_error = bits, U32, 80, [0:0], "true", "false";
+ ind_clt_error = bits, U32, 80, [1:1], "true", "false";
+ ind_map_error = bits, U32, 80, [2:2], "true", "false";
+ ind_iat_error = bits, U32, 80, [3:3], "true", "false";
+ ind_isTriggerError = bits, U32, 80, [5:5], "true", "false";
+ ind_hasFatalError=bits, U32, 80, [6:6], "true", "false";
+ ind_isWarnNow =bits, U32, 80, [7:7], "true", "false";
+ firmwareTsVersion = scalar,U32, 84, "version_p", 1, 0
+ egt1 = scalar, S16, 88, "°C", 1, 0
+ egt2 = scalar, S16, 90, "°C", 1, 0
+ egt3 = scalar, S16, 92, "°C", 1, 0
+ egt4 = scalar, S16, 94, "°C", 1, 0
+ egt5 = scalar, S16, 96, "°C", 1, 0
+ egt6 = scalar, S16, 98, "°C", 1, 0
+ egt7 = scalar, S16, 100, "°C", 1, 0
+ egt8 = scalar, S16, 102, "°C", 1, 0
+ rpmAcceleration = scalar, F32, 104, "dRpm", 1, 0
+ massAirFlowValue= scalar, F32, 108, "Kg/h", 1, 0
+ veValue = scalar, F32, 112, "ratio", 1, 0
+ deltaTps = scalar, F32, 116, "ratio", 1, 0
+ triggerErrorsCounter = scalar, U32,120, "counter", 1, 0
+ engineLoadAccelExtra = scalar,F32, 124, "value", 1, 0
+ tpsAccelFuel = scalar, F32, 128, "ms", 1, 0
+ baroCorrection = scalar, F32, 132, "%", 1, 0
+ pedalPosition = scalar, F32, 136, "%", 1, 0
+ injectorDutyCycle= scalar, F32, 140, "%", 1, 0
+ knockCount = scalar, U32, 144, "counter", 1, 0
+ ; fuelLevel 148
+ knockLevel = scalar, F32, 152, "Volts", 1, 0
+ ; totalTriggerErrorCounter 156
+ wallFuelAmount = scalar, F32, 160, "ms", 1, 0
+ iatCorrection = scalar, F32, 164, "%", 1, 0
+ wallFuelCorrection = scalar, F32, 168, "ms", 1, 0
+ curIdlePosition = scalar, F32, 172, "percent", 1, 0
+ cltCorrection = scalar, F32, 184, "%", 1, 0
+ debugIntField1 = scalar, U32, 192, "val", 1, 0.0;
+ debugFloatField2 = scalar, F32, 200, "val", 1, 0.0;
+ debugFloatField3 = scalar, F32, 204, "val", 1, 0.0;
+ debugFloatField4 = scalar, F32, 208, "val", 1, 0.0;
+ debugFloatField5 = scalar, F32, 212, "val", 1, 0.0;
+ debugIntField2 = scalar, U32, 216, "val", 1, 0.0;
+ debugIntField3 = scalar, U32, 220, "val", 1, 0.0;
+ engineLoadDelta = scalar,F32, 228, "value", 1, 0
+ speedToRpmRatio = scalar,F32, 232, "value", 1, 0
+ warningCounter = scalar,U32, 236, "count", 1, 0
+ lastErrorCode = scalar,U32, 240, "error", 1, 0
+ internalMcuTemperature = scalar,F32, 244, "C", 1, 0
+ vvtPosition = scalar,F32, 248, "deg", 1, 0
+ engineMode = scalar, U32, 252, "em", 1, 0.0;
+ debugFloatField6 = scalar, F32, 256, "val", 1, 0.0;
+ debugFloatField7 = scalar, F32, 260, "val", 1, 0.0;
+ firmwareVersion = scalar,U32, 264, "version_f", 1, 0
+ fuelPidCorrection = scalar, F32, 268, "ms", 1, 0
+ coilDutyCycle = scalar, F32, 272, "perc", 1, 0
+
+ egoCorrection = { 100 }
+ time = { timeNow }
+; engineLoad = { fuleAlgorithm == 0 ? MAF : TPS }
+
+[CurveEditor]
+; xAxis = leftValue, rightValue, step
+; yAxis = bottomValue, topValue, step
+
+
+ curve = knockThresholdCurve, "Engine knock threshold RPM based"
+ columnLabel = "RPM", "Threshold"
+ xAxis = 0, 8000, 10
+ yAxis = 0, 8, 10
+ xBins = knockNoiseRpmBins, rpm
+ yBins = knockNoise
+ gauge = rpm
+
+ curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper"
+ columnLabel = "Distance", "Multiplier"
+ xAxis = 0, 128, 10
+ yAxis = -5, 5, 10
+ xBins = mapAccelTaperBins
+ yBins = mapAccelTaperMult
+
+ curve = dwellCorrection, "Dwell time RPM based"
+ columnLabel = "RPM", "Dwell"
+ xAxis = 0, 8000, 10
+ yAxis = 0, 30, 10
+ xBins = sparkDwellRpmBins, rpm
+ yBins = sparkDwellValues
+ gauge = rpm
+
+ curve = map_samplingAngleCurve, "MAP Sampling Start Angle"
+ columnLabel = "RPM", "Angle"
+ xAxis = 0, 8000, 10
+ yAxis = 0, 180, 10
+ xBins = map_samplingAngleBins, rpm
+ yBins = map_samplingAngle
+ gauge = rpm
+
+ curve = map_samplingWindowCurve, "MAP Sampling Duration"
+ columnLabel = "RPM", "Window"
+ xAxis = 0, 8000, 10
+ yAxis = 0, 180, 10
+ xBins = map_samplingWindowBins, rpm
+ yBins = map_samplingWindow
+ gauge = rpm
+
+ curve = injectorsDeadTime, "Injector Dead Time by VBatt"
+ columnLabel = "Voltage", "Dead Time"
+ xAxis = 8, 21, 10
+ yAxis = -3, 3, 10
+ xBins = injector_battLagCorrBins, VBatt
+ yBins = injector_battLagCorr
+ gauge = VBattGauge
+
+ curve = mafDecodingCurve, "MAF Sensor Settings"
+ columnLabel = "Voltage", "kg/hour"
+ xAxis = -1, 6, 10
+ yAxis = -30, 1300, 10
+ xBins = mafDecodingBins, MAF
+ yBins = mafDecoding
+ gauge = mafGaugeVolts
+
+ curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier"
+ columnLabel = "Coolant", "Multiplier"
+ xAxis = -40, 120, 10
+ yAxis = 0, 5, 10
+ xBins = iatFuelCorrBins, intake
+ yBins = iatFuelCorr
+ gauge = IATGauge
+
+ curve = cltTimingCorrCurve, "Warmup timing correction"
+ columnLabel = "Coolant", "Extra"
+ xAxis = -40, 120, 10
+ yAxis = 0, 50, 100
+ xBins = cltTimingBins, coolant
+ yBins = cltTimingExtra
+ gauge = CLTGauge
+
+ curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier"
+ columnLabel = "Coolant", "Multiplier"
+ xAxis = -40, 120, 10
+ yAxis = 0, 50, 100
+ xBins = cltFuelCorrBins, coolant
+ yBins = cltFuelCorr
+ gauge = CLTGauge
+
+ curve = crankingCltCurve, "Cranking Coolant Temperature multiplier"
+ columnLabel = "Coolant", "Multiplier"
+ xAxis = -40, 120, 10
+ yAxis = 0, 5, 10
+ xBins = crankingFuelBins, coolant
+ yBins = crankingFuelCoef
+ gauge = CLTGauge
+
+ curve = crankingTpsCurve, "Cranking TPS Multiplier"
+ columnLabel = "TPS", "Multiplier"
+ xAxis = -40, 120, 10
+ yAxis = 0, 5, 10
+ xBins = crankingTpsBins, TPS
+ yBins = crankingTpsCoef
+ gauge = throttleGauge
+
+ curve = crankingDurationCurve, "Cranking Duration Multiplier"
+ columnLabel = "Engine Cycle", "Multiplier"
+ xAxis = 0, 1000, 10
+ yAxis = 0, 5, 10
+ xBins = crankingCycleBins
+ yBins = crankingCycleCoef
+
+
+ curve = cltIdleCurve, "Warmup IAC position manual Multiplier"
+ columnLabel = "Coolant", "Multiplier"
+ xAxis = -40, 120, 10
+ yAxis = 0, 50, 100
+ xBins = cltIdleCorrBins, coolant
+ yBins = cltIdleCorr
+ gauge = CLTGauge
+
+ curve = warmupTargetAfrCurve, "CLT-based target AFR"
+ columnLabel = "Coolant", "Correction"
+ xAxis = -40, 120, 10
+ yAxis = 0, 50, 100
+ xBins = warmupTargetAfrBins, coolant
+ yBins = warmupTargetAfr
+ gauge = CLTGauge
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+ table = fuelTableTbl, fuelTableMap, "Fuel Table", 1
+ ; constant, variable
+ xBins = fuelRpmBins, rpm
+ yBins = fuelLoadBins, engineLoad
+ zBins = fuelTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+ table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS acceleration Multiplier", 1
+ xBins = tpsTpsAccelFromRpmBins, TPS
+ yBins = tpsTpsAccelToRpmBins, TPS
+ zBins = tpsTpsAccelTable
+
+
+ table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1
+ xBins = fsioTable1RpmBins, rpm
+ yBins = fsioTable1LoadBins, engineLoad
+ zBins = fsioTable1
+
+ table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1
+ xBins = fsioTable2RpmBins, rpm
+ yBins = fsioTable2LoadBins, engineLoad
+ zBins = fsioTable2
+
+ table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1
+ xBins = fsioTable3RpmBins, rpm
+ yBins = fsioTable3LoadBins, engineLoad
+ zBins = fsioTable3
+
+ table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1
+ xBins = fsioTable4RpmBins, rpm
+ yBins = fsioTable4LoadBins, engineLoad
+ zBins = fsioTable4
+
+ table = baroCorrTbl, baroCorrMap, "Baro Correction", 1
+ ; constant, variable
+ xBins = baroCorrRpmBins, rpm
+ yBins = baroCorrPressureBins, baroPressure
+ zBins = baroCorrTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+ table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1
+ ; constant, variable
+ xBins = ignitionRpmBins, rpm
+ yBins = ignitionLoadBins, engineLoad
+ zBins = ignitionTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+ table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1
+ ; constant, variable
+ xBins = ignitionIatCorrRpmBins, rpm
+ yBins = ignitionIatCorrLoadBins, intake
+ zBins = ignitionIatCorrTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+ table = veTableTbl, veTableMap, "VE Table", 1
+ ; constant, variable
+ xBins = veRpmBins, rpm
+ yBins = veLoadBins, MAPValue
+ zBins = veTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+
+ table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1
+ ; constant, variable
+ xBins = injPhaseRpmBins, rpm
+ yBins = injPhaseLoadBins, engineLoad
+ zBins = injectionPhase
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(Later)", "(Sooner)"
+
+ table = afrTableTbl, afrTableMap, "Target AFR Table", 1
+ ; constant, variable
+ xBins = afrRpmBins, rpm
+ yBins = afrLoadBins, MAPValue
+ zBins = afrTable
+; gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+ upDownLabel = "(RICHER)", "(LEANER)"
+
+[GaugeConfigurations]
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+ tachometer = rpm, "Engine Speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0
+#if CELSIUS
+ CLTGauge = coolant, "Coolant Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
+#else
+ CLTGauge = coolant, "Coolant Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
+#endif
+#if CELSIUS
+ IATGauge = intake, "Intake Air Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
+#else
+ IATGauge = intake, "Intake Air Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
+#endif
+#if CELSIUS
+ tChargeGauge = tCharge, "Charge Temp", "°C", -40, 140, -15, 1, 95, 110, 1, 1
+#else
+ tChargeGauge = tCharge, "Charge Temp", "°F", -40, 285, 5, 35, 205, 230, 1, 1
+#endif
+
+
+ throttleGauge = TPS, "Throttle Position", "%", 0, 100, 0, 0, 100, 100, 2, 2
+ afr1Gauge = AFRactual, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ mafGaugeVolts = MAF, "Mass Air Flow", "v", 0, 5, 0, 1, 3, 4, 1, 1
+ VBattGauge = VBatt, "Battery Voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1
+ tpsADCGauge = tpsADC, "tps ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0
+ atmPresCGauge = baroPressure, "Baro", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0
+ mapGaugeValue = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0
+ ignadvGauge = ign_adv, "Ignition Advance 1", "degrees", -100, 100, -999, -999, 999, 999, 1, 1
+; warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+; accelEnrichGauge = accDecEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ egt1Gauge = egt1, "EGT#1", "C", 0, 2000
+ egt2Gauge = egt2, "EGT#2", "C", 0, 2000
+ egt3Gauge = egt3, "EGT#3", "C", 0, 2000
+ egt4Gauge = egt4, "EGT#4", "C", 0, 2000
+ egt5Gauge = egt5, "EGT#5", "C", 0, 2000
+ egt6Gauge = egt6, "EGT#6", "C", 0, 2000
+ egt7Gauge = egt7, "EGT#7", "C", 0, 2000
+ egt8Gauge = egt8, "EGT#8", "C", 0, 2000
+ vssGauge = vehicleSpeedKph, "Speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1
+ rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1
+ massAirFlowValueGa = massAirFlowValue,"Air Flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1
+ veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1
+ baroCorrectionGauge = baroCorrection,"BaroCorr", "%", 0, 120, 10, 10, 100, 100, 1, 1
+ pedalPositionGauge = pedalPosition,"Pedal Position", "%", 0, 120, 10, 10, 100, 100, 1, 1
+ knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1
+ knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2
+
+ triggerErrorsCounterGauge = triggerErrorsCounter, "trg err", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0
+
+ pulseWidthGauge = pulseWidth, "fuel final squirt, per injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ baseFuelGauge = baseFuel, "fuel: base duration, before corr", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ fuelPidCorrectionGauge = fuelPidCorrection, "fuel: closed loop correction", "mSec", -11, 11, 1.0, 1.2, 20, 25, 3, 1
+ coilDutyCycleGauge = coilDutyCycle, "dwell: duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1
+
+ crankingFuelGauge = crankingFuel, "fuel: crank Width", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2
+ cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2
+ injectorDutyCycleGauge=injectorDutyCycle, "fuel: injectorDutyCycle","%", 0, 120, 10, 10, 100, 100, 1, 1
+
+ engineLoadDeltaGauge = engineLoadDelta,"fuel: load change","value", 0, 120, 10, 10, 100, 100, 1, 1
+ engineLoadAccelExtraGauge = engineLoadAccelExtra,"fuel: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1
+ deltaTpsGauge = deltaTps, "fuel: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1
+ tpsAccelFuelGauge = tpsAccelFuel,"fuel: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1
+ wallFuelAmountGauge = wallFuelAmount, "fuel: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0
+ wallFuelCorrectionGauge = wallFuelCorrection, "fuel: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0
+
+ curIdlePositionGauge = curIdlePosition, "idle position", "%", 0, 100, 0, 0, 100, 100, 0, 0
+
+ debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField2Gauge = debugFloatField2, "debug f2", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField3Gauge = debugFloatField3, "debug f3", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField4Gauge = debugFloatField4, "debug f4", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField5Gauge = debugFloatField5, "debug f5", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField6Gauge = debugFloatField6, "debug f6", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4
+ debugIntField1Gauge = debugIntField1, "debug i1", "%", 0, 100, 0, 0, 100, 100, 0, 0
+ debugIntField2Gauge = debugIntField2, "debug i2", "%", 0, 100, 0, 0, 100, 100, 0, 0
+ debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0
+ speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4
+ warningCounterGauge = warningCounter, "warn", "", 0, 100, 0, 0, 100, 100, 0, 0
+ lastErrorCodeGauge = lastErrorCode, "error", "", 0, 8000, 0, 0, 8000, 8000, 0, 0
+ internalMcuTemperatureGauge = internalMcuTemperature, "internal temperature", "C", 0, 100, 0, 0, 100, 100, 0, 0
+ vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0
+
+
+[FrontPage]
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ ; currently a minimum of 6 gauges must be on the dash, this appears to be an old not needed limitation. next release 1 will work.
+ gauge1 = tachometer
+ gauge2 = CLTGauge
+ gauge3 = throttleGauge
+ gauge4 = mafGaugeVolts
+ gauge5 = afr1Gauge
+ gauge6 = VBattGauge
+ gauge7 = dwellGauge
+ gauge8 = ignadvGauge
+
+
+
+; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg
+ ; important status
+ indicator = { ind_hasFatalError }, "", "FATAL ERROR", green, black, red, black
+ indicator = { firmwareTsVersion == fileVersion }, "WRONG VERSION", "version", red, black, green, black
+ indicator = { ind_isWarnNow }, "", "warn", green, black, red, black
+ indicator = { ind_check_engine }, "ok", "Check engine", green, black, red, black
+ indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", red, black, green, black
+ indicator = { ind_injection_enabled}, "no injection", "injection", red, black, green, black
+ indicator = { ind_isTriggerError}, "ok", "trg err", green, black, red, black
+
+
+ ; minor info
+ indicator = { ind_fan}, "no fan", "fan", white, black, green, black
+ indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, green, black
+ indicator = { needBurn }, "no Burn", "Need Burn", white, black, yellow, black
+ indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black
+ indicator = { ind_fuel_pump}, "no pump", "pump", white, black, green, black
+ indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black
+ indicator = { clutchDownState }, "clutch", "cltch Down", white, black, red, black
+
+ ; error codes
+ indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black
+ indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black
+ indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black
+ indicator = { ind_map_error}, "map", "map error", white, black, red, black
+
+ indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black
+ indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black
+
+
+[Datalog]
+ ; Channel Label Type Format
+ entry = time, "Time", float, "%.3f"
+ entry = rpm, "RPM", int, "%d"
+ entry = firmwareVersion, "version", int, "%d"
+ entry = coolant, "CLT", float, "%.2f"
+ entry = intake, "IAT", float, "%.2f"
+ entry = TPS, "TPS", float, "%.2f"
+ entry = MAF, "MAF", float, "%.2f"
+ entry = MAPValue, "MAP", float, "%.1f"
+ entry = AFRactual, "AFR", float, "%.2f"
+ entry = VBatt, "vBatt", float, "%.2f"
+ entry = engineLoad, "Load", float, "%.1f"
+ entry = ign_adv, "ignAdv", float, "%.2f"
+ entry = knockLevel, "Knock", float, "%.2f"
+ entry = vehicleSpeedKph, "speed", float, "%.2f"
+ entry = speedToRpmRatio, "s2rpm", float, "%.3f"
+ entry = rpmAcceleration, "dRPM", float, "%.3f"
+ entry = massAirFlowValue,"airMass", float, "%.3f"
+ entry = pedalPosition, "pedal", float, "%.3f"
+ entry = triggerErrorsCounter, "trg err",int, "%d"
+ entry = curIdlePosition, "idle position", float, "%.3f"
+
+
+ entry = pulseWidth, "fuel: pulse", float, "%.3f"
+ entry = baseFuel, "fuel: base", float, "%.2f"
+ entry = fuelPidCorrection,"fuel: pid", float, "%.2f"
+ entry = veValue, "fuel: VE", float, "%.3f"
+ entry = injectorDutyCycle,"fuel: duty cyc",float,"%.3f"
+ entry = coilDutyCycle, "dwell: duty", float,"%.3f"
+
+ entry = engineLoadAccelExtra, "fuel: load extra",float, "%.3f"
+ entry = engineLoadDelta, "fuel: load change",float, "%.3f"
+
+ entry = deltaTps, "fuel: TPS change",float, "%.3f"
+ entry = tpsAccelFuel, "fuel: TOS enrich", float, "%.3f"
+
+ entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f"
+ entry = wallFuelAmount, "fuel: wall amount", float, "%.3f"
+
+ entry = baroCorrection, "baroCorrection",float,"%.3f"
+ entry = iatCorrection, "fuel: IAT corr", float, "%.3f"
+ entry = cltCorrection, "cltCorrection", float,"%.3f"
+
+ entry = sparkDwellValue, "dwell", float,"%.3f"
+ entry = vvtPosition, "VVT", float,"%.2f"
+
+; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d"
+; Alternator_PID: alternator duty cycle
+; DBG_TPS_ACCEL: from TPS
+ entry = debugFloatField1, "debug f1",float,"%.4f"
+
+; Alternator_PID: current integration term
+; DBG_TPS_ACCEL: to TPS
+ entry = debugFloatField2, "debug f2",float,"%.4f"
+
+; Alternator_PID: previous error
+; DBG_TPS_ACCEL: tps<>tps table value
+ entry = debugFloatField3, "debug f3",float,"%.4f"
+
+; Alternator_PID: I setting
+; DBG_TPS_ACCEL: extra fuel
+ entry = debugFloatField4, "debug f4",float,"%.4f"
+
+; Alternator_PID: D setting
+ entry = debugFloatField5, "debug f5",float,"%.4f"
+
+; Alternator_PID: dTerm
+ entry = debugFloatField6, "debug f6",float,"%.4f"
+
+ entry = debugFloatField7, "debug f7",float,"%.4f"
+
+
+; Alternator_PID: P setting
+ entry = debugIntField1, "debug i1",int,"%d"
+
+; Alternator_PID: offset setting
+ entry = debugIntField2, "debug i2",int,"%d"
+
+; Alternator_PID: PID reset counter
+ entry = debugIntField3, "debug i3",int,"%d"
+
+ entry = engineMode, "mode",int,"%d"
+ entry = warningCounter, "err: count",int,"%d"
+ entry = lastErrorCode, "err: last",int,"%d"
+ entry = internalMcuTemperature, "int temp",float,"%.2f"
+
+ entry = tCharge, "tCharge",float,"%.3f"
+
+; tpsADC = U16, "ADC",
+; alignmet = U16, "al",
+; atmPres = F32, "pres",
+; crankingFuel = F32, "ms",
+; tCharge = F32, "T",
+; sparkDwell = F32, "MAP",
+; warmUpEnrich = F32, "%",
+
+[Menu]
+
+ menu = "Engine"
+ subMenu = engineChars, "Base Engine Settings"
+ subMenu = triggerConfiguration, "Trigger Configuration"
+ subMenu = std_separator
+ subMenu = injectionSettings, "Injection Settings"
+ subMenu = ignitionSettings, "Ignition Settings"
+ subMenu = std_separator
+ subMenu = analogInputs, "Analog inputs"
+ subMenu = cltSensor, "CLT Sensor Settings"
+ subMenu = iatSensor, "IAT Sensor Settings"
+ subMenu = auxTempSensor1Sensor, "AuxTemp1 Sensor Settings"
+ subMenu = auxTempSensor2Sensor, "AuxTemp2 Sensor Settings"
+ subMenu = mapSettings, "MAP Sensor Settings"
+ subMenu = mafDecodingCurve, "MAF Sensor Settings"
+ subMenu = egoSettings, "EGO Sensor Settings"
+ subMenu = egtInputs, "EGT inputs"
+ subMenu = energySystems, "Battery and Alternator Settings"
+ subMenu = auxPidDialog, "Aux PID"
+ subMenu = speedSensor, "Speed Sensor Settings"
+ subMenu = tachSettings, "Tachometer output"
+ subMenu = std_separator
+ subMenu = fanSetting, "Fan Settings"
+ subMenu = idleSettings, "Idle Settings"
+ subMenu = mainRealay, "Main Relay Settings"
+ subMenu = fuelPump, "Fuel Pump Settings"
+ subMenu = malfunction, "MIL Settings"
+ subMenu = hipFunction, "hip9011 Settings (knock decoder)"
+ subMenu = cj125Function, "CJ125 Settings (wbo decoder)"
+ subMenu = spiFunction, "SPI Settings"
+ subMenu = etbDialog, "Electronic Thtottle Body (alpha)"
+ menu = "Tuning"
+ subMenu = generalSettings, "General"
+ subMenu = monitoringSettings, "rusEfi Console Settings"
+ subMenu = std_separator
+ subMenu = crankingDialog, "Cranking"
+ subMenu = crankingCltCurve, "Cranking Coolant Temp Multiplier"
+ subMenu = crankingTpsCurve, "Cranking TPS Multiplier"
+ subMenu = crankingDurationCurve, "Cranking Duration Multiplier"
+ subMenu = std_separator
+ subMenu = warmupFuelDialog, "Warmup fuel closed-loop"
+ subMenu = cltFuelCorrCurve, "Warmup fuel manual Multiplier", 0, {useWarmupPidAfr == 0}
+ subMenu = warmupTargetAfrCurve, "Warmup fuel auto correction AFR target", 0, {useWarmupPidAfr == 1}
+ subMenu = cltIdleCurve, "Warmup IAC position manual Multiplier"
+ subMenu = cltTimingCorrCurve, "Warmup timing correction"
+ subMenu = std_separator
+ subMenu = fuelTableTbl, "Fuel Table", 0, {fuelAlgorithm != 3}
+ subMenu = veTableTbl, "VE Table", 0, {fuelAlgorithm == 3}
+ subMenu = afrTableTbl, "Targe AFR Table", 0, {fuelAlgorithm == 3}
+ subMenu = iatFuelCorrCurve, "Intake air temperature fuel Multiplier"
+ subMenu = injPhaseTableTbl, "Injection Phase"
+ subMenu = mapAccelTaper, "Engine Load Acceleration Enrichment Taper"
+ subMenu = std_separator
+ subMenu = fuelClosedLoopDialog, "Fuel closed-loop correction"
+ subMenu = AccelEnrich, "Accel/Decel Enrichment/Enleanment"
+ subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration Multiplier"
+ subMenu = std_separator
+ subMenu = ignitionTableTbl, "Ignition Table"
+ subMenu = ignitionIatCorrTableTbl, "Ignition Intake Air Temp correction"
+ subMenu = baroCorrTbl, "Baro Correction", 0, {fuelAlgorithm == 3}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Realtime Display", 0
+ subMenu = tChargeSettings, "tCharge Settings"
+
+ menu = "3D Map Tuning"
+; subMenu = std_realtime, "Realtime Display"
+; subMenu = std_warmup, "Warmup Wizard"
+ subMenu = fuelTableMap, "Fuel Table", 0, {fuelAlgorithm != 3}
+ subMenu = veTableMap, "VE Table", 0, {fuelAlgorithm == 3}
+ subMenu = afrTableMap, "Targe AFR Table", 0, {fuelAlgorithm == 3}
+ subMenu = injPhaseTableMap, "Injection Phase"
+ subMenu = ignitionTableMap, "Ignition Table"
+ subMenu = ignitionIatCorrTableMap, "Ignition Intake Air Temp correction"
+
+ menu = "Racing Features"
+ subMenu = smLaunchControl, "Launch Control"
+ subMenu = std_separator
+
+ menu = "Board"
+ subMenu = fsioInputsDialog, "FSIO inputs"
+ subMenu = fsioOutputsDialog, "FSIO outputs"
+ subMenu = fsioTable1Tbl, "FSIO Table #1"
+ subMenu = fsioTable2Tbl, "FSIO Table #2"
+ subMenu = fsioTable3Tbl, "FSIO Table #3"
+ subMenu = fsioTable4Tbl, "FSIO Table #4"
+ subMenu = std_separator
+ subMenu = connection, "Connection"
+ subMenu = joystickPanel, "Joystick"
+ subMenu = std_separator
+ subMenu = ioTest, "I-O Test"
+ subMenu = ecuStimulator, "ECU stimulator"
+ subMenu = allPins, "Full pinout"
+
+[ControllerCommands]
+; commandName = command1, command2, commandn...
+; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order.
+; This does not include any resultant protocol envelope data, only the response data itself.
+
+; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands
+; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition
+; and may create error messages.
+; It is expected that these commands would not typically alter any ram mapped to a Constant.
+
+cmd_test_spk1 = "w\x00\x12\x00\x01"
+cmd_test_spk2 = "w\x00\x12\x00\x02"
+cmd_test_spk3 = "w\x00\x12\x00\x03"
+cmd_test_spk4 = "w\x00\x12\x00\x04"
+cmd_test_spk5 = "w\x00\x12\x00\x05"
+cmd_test_spk6 = "w\x00\x12\x00\x06"
+cmd_test_spk7 = "w\x00\x12\x00\x07"
+cmd_test_spk8 = "w\x00\x12\x00\x08"
+cmd_test_spk9 = "w\x00\x12\x00\x09"
+cmd_test_spk10 = "w\x00\x12\x00\x0a"
+cmd_test_spk11 = "w\x00\x12\x00\x0b"
+cmd_test_spk12 = "w\x00\x12\x00\x0c"
+cmd_test_spk13 = "w\x00\x12\x00\x0d"
+cmd_test_spk14 = "w\x00\x12\x00\x0e"
+cmd_test_spk15 = "w\x00\x12\x00\x0f"
+cmd_test_spk16 = "w\x00\x12\x00\x10"
+
+
+cmd_test_inj1 = "w\x00\x13\x00\x01"
+cmd_test_inj2 = "w\x00\x13\x00\x02"
+cmd_test_inj3 = "w\x00\x13\x00\x03"
+cmd_test_inj4 = "w\x00\x13\x00\x04"
+cmd_test_inj5 = "w\x00\x13\x00\x05"
+cmd_test_inj6 = "w\x00\x13\x00\x06"
+cmd_test_inj7 = "w\x00\x13\x00\x07"
+cmd_test_inj8 = "w\x00\x13\x00\x08"
+cmd_test_inj9 = "w\x00\x13\x00\x09"
+cmd_test_inj10 = "w\x00\x13\x00\x0a"
+cmd_test_inj11 = "w\x00\x13\x00\x0b"
+cmd_test_inj12 = "w\x00\x13\x00\x0c"
+cmd_test_inj13 = "w\x00\x13\x00\x0d"
+cmd_test_inj14 = "w\x00\x13\x00\x0e"
+cmd_test_inj15 = "w\x00\x13\x00\x0f"
+cmd_test_inj16 = "w\x00\x13\x00\x10"
+
+cmd_test_fuel_pump = "w\x00\x14\x00\x01"
+cmd_test_radiator_fan = "w\x00\x15\x00\x01"
+cmd_test_check_engine_light = "w\x00\x16\x00\x01"
+cmd_test_idle_valve = "w\x00\x17\x00\x01"
+
+
+[UserDefined]
+ dialog = tChargeSettings, "tChart Settings"
+ field = "MinRpm MinTps", tChargeMinRpmMinTps
+ field = "MinRpm MaxTps", tChargeMinRpmMaxTps
+ field = "MaxRpm MinTps", tChargeMaxRpmMinTps
+ field = "MaxRpm MaxTps", tChargeMaxRpmMaxTps
+
+ dialog = baseInjection, "Injection"
+ field = "Enabled", isInjectionEnabled
+ field = "Mode", injectionMode, {isInjectionEnabled == 1}
+ field = "#Batch injection with individual wiring"
+ field = "Two wire batch", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2}
+
+ dialog = baseIgnition, "Ignition"
+ field = "Enabled", isIgnitionEnabled
+ field = "Mode", ignitionMode, {isIgnitionEnabled == 1}
+ field = "#Wasted spark with individual coils"
+ field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2}
+ field = "Timing Mode", timingMode, {isIgnitionEnabled == 1}
+ field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1}
+
+
+; Engine->Base Engine Settings
+ dialog = engineChars, "Base Engine Settings"
+; field = "Engine Preset", engineType
+ field = "Number of Cylinders", cylindersCount
+ field = "Engine Displacement", displacement
+ field = "debug fields", debugMode
+ field = ""
+ field = "Firing Order", firingOrder
+ panel = baseInjection
+ panel = baseIgnition
+
+; Engine->Trigger configuration
+ dialog = triggerConfiguration_settings, "Settings Trigger"
+ field = "Trigger type", trigger_type
+ field = "Operation mode", operationMode
+ field = "With VR sensors only rising edge has reliable position"
+ field = "use only rising edge", useOnlyRisingEdgeForTrigger
+ field = "Trigger Angle Offset", globalTriggerAngleOffset
+ field = "#Custom Trigger"
+ field = "total Tooth Count", trigger_customTotalToothCount, {trigger_type == 0}
+ field = "skipped Tooth Count", trigger_customSkippedToothCount, {trigger_type == 0}
+
+ dialog = triggerConfiguration_IO, "Settings I/O"
+ field = "!ECU reboot needed to apply pin assignment"
+ field = "#Cam is primary if you have cam sensor"
+ field = "Primary input channel", triggerInputPins1
+ field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20}
+ field = "Cam Sync/VVT input", camInput
+ field = "VVT mode", vvtMode, {trigger_type != 80}
+ field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80}
+ field = "VVT position display offset", vvtOffset
+ field = "VVT display inverted", vvtDisplayInverted
+ field = "NB2 from temp", nb2ratioFrom
+ field = "NB2 to temp", nb2ratioTo
+ field = "nbVvtIndex", nbVvtIndex
+ field = "Trigger error LED", triggerErrorPin
+ field = "Trigger error LED mode", triggerErrorPinMode
+ field = "print sync details to console", isPrintTriggerSynchDetails
+ dialog = triggerConfiguration
+ panel = triggerConfiguration_settings, North
+ panel = triggerConfiguration_IO, South
+
+; Engine->Injection Settings
+ dialog = injChars, "Injector Settings", yAxis
+ field = "Injector Flow", injector_flow
+ field = "phase offset", extraInjectionOffset
+
+ dialog = injIO, "Injector Output", yAxis
+ field = "!ECU reboot needed to apply these settings"
+ field = "injection Pin Mode", injectionPinMode
+ field = "Injection Pin 1", injectionPins1
+ field = "Injection Pin 2", injectionPins2, {cylindersCount > 1}
+ field = "Injection Pin 3", injectionPins3, {cylindersCount > 2}
+ field = "Injection Pin 4", injectionPins4, {cylindersCount > 3}
+ field = "Injection Pin 5 ", injectionPins5, {cylindersCount > 4}
+ field = "Injection Pin 6 ", injectionPins6, {cylindersCount > 5}
+ field = "Injection Pin 7 ", injectionPins7, {cylindersCount > 6}
+ field = "Injection Pin 8 ", injectionPins8, {cylindersCount > 7}
+ field = "Injection Pin 9 ", injectionPins9, {cylindersCount > 8}
+ field = "Injection Pin 10 ", injectionPins10, {cylindersCount > 9}
+ field = "Injection Pin 11 ", injectionPins11, {cylindersCount > 10}
+ field = "Injection Pin 12 ", injectionPins12, {cylindersCount > 11}
+
+ dialog = injectorSetting, "", yAxis
+ panel = injChars, North
+ panel = injIO, East
+
+ dialog = injectionSettings, "", xAxis
+ panel = injectorSetting, West
+ panel = injectorsDeadTime, East
+
+ dialog = ignitionCylExtra, "Ignition Cyliner Extra"
+ field = "Extra cyl #1", timing_offset_cylinder1
+ field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1}
+ field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2}
+ field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3}
+ field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4}
+ field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5}
+ field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6}
+ field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7}
+ field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8}
+ field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9}
+ field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10}
+ field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11}
+
+
+; Engine->Ignition Settings
+ dialog = ignitionOutputs, "Ignition Outputs"
+ field = "Ignition Pin Mode", ignitionPinMode
+ field = "Ignition Pin 1", ignitionPins1
+ field = "Ignition Pin 2", ignitionPins2, {(ignitionMode != 0 && cylindersCount > 1) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12)))}
+ field = "Ignition Pin 3", ignitionPins3, {(ignitionMode != 0 && cylindersCount > 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9)))}
+ field = "Ignition Pin 4", ignitionPins4, {(ignitionMode != 0 && cylindersCount > 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12)))}
+ field = "Ignition Pin 5", ignitionPins5, {(ignitionMode != 0 && cylindersCount > 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12)))}
+ field = "Ignition Pin 6", ignitionPins6, {(ignitionMode != 0 && cylindersCount > 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 )}
+ field = "Ignition Pin 7", ignitionPins7, {(ignitionMode != 0 && cylindersCount > 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11)))}
+ field = "Ignition Pin 8", ignitionPins8, {(ignitionMode != 0 && cylindersCount > 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
+ field = "Ignition Pin 9", ignitionPins9, {(ignitionMode != 0 && cylindersCount > 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
+ field = "Ignition Pin 10", ignitionPins10, {(ignitionMode != 0 && cylindersCount > 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
+ field = "Ignition Pin 11", ignitionPins11, {(ignitionMode != 0 && cylindersCount > 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
+ field = "Ignition Pin 12", ignitionPins12, {(ignitionMode != 0 && cylindersCount > 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11)))}
+ field = "This is useful to have tachometer working while converting from distributor"
+ field = "Dizzy out Pin", dizzySparkOutputPin
+ field = "Dizzy out Pin Mode", dizzySparkOutputPinMode
+
+ dialog = ignitionSettings, "", xAxis
+ panel = ignitionOutputs, West
+ panel = dwellCorrection, Center
+ panel = ignitionCylExtra, East
+
+; Engine->Aux1 Thermistor Settings
+ dialog = auxTempSensor1_thermistor, "aux1 Thermistor Settings"
+ field = "!Here is three pairs of thermistor temperature and his resistance."
+ field = "!Typical temperatures is -40°C, 0°C and 100°C"
+ field = ""
+ field = "Lowest temperature", auxTempSensor1_tempC_1
+ field = "Resistance @ LT", auxTempSensor1_resistance_1
+ field = ""
+ field = "Middle temperature", auxTempSensor1_tempC_2
+ field = "Resistance @ MT", auxTempSensor1_resistance_2
+ field = ""
+ field = "Highest temperature", auxTempSensor1_tempC_3
+ field = "Resistance @ HT", auxTempSensor1_resistance_3
+ dialog = auxTempSensor1Sensor_IO, "auxTempSensor1 Sensor I/O"
+ field = "auxTempSensor1 ADC input", auxTempSensor1_adcChannel
+ field = "Bias Resistor Value", auxTempSensor1_bias_resistor
+ dialog = auxTempSensor1Sensor, "", yAxis
+ panel = auxTempSensor1_thermistor, North
+ panel = auxTempSensor1Sensor_IO, South
+
+; Engine->Aux2 Thermistor Settings
+ dialog = auxTempSensor2_thermistor, "aux1 Thermistor Settings"
+ field = "!Here is three pairs of thermistor temperature and his resistance."
+ field = "!Typical temperatures is -40°C, 0°C and 100°C"
+ field = ""
+ field = "Lowest temperature", auxTempSensor2_tempC_1
+ field = "Resistance @ LT", auxTempSensor2_resistance_1
+ field = ""
+ field = "Middle temperature", auxTempSensor2_tempC_2
+ field = "Resistance @ MT", auxTempSensor2_resistance_2
+ field = ""
+ field = "Highest temperature", auxTempSensor2_tempC_3
+ field = "Resistance @ HT", auxTempSensor2_resistance_3
+ dialog = auxTempSensor2Sensor_IO, "auxTempSensor2 Sensor I/O"
+ field = "auxTempSensor2 ADC input", auxTempSensor2_adcChannel
+ field = "Bias Resistor Value", auxTempSensor2_bias_resistor
+ dialog = auxTempSensor2Sensor, "", yAxis
+ panel = auxTempSensor2_thermistor, North
+ panel = auxTempSensor2Sensor_IO, South
+
+
+ dialog = allPins1
+ field = "MAP ADC input", map_sensor_hwChannel
+ field = "frequencyReportingMapInputPin", frequencyReportingMapInputPin
+ field = "CLT ADC input", clt_adcChannel
+ field = "IAT ADC input", iat_adcChannel
+ field = "vBatt ADC input", vbattAdcChannel
+ field = "TPS ADC input", tpsAdcChannel
+ field = "MAF ADC input", mafAdcChannel
+ field = "AFR ADC input", afr_hwChannel
+ field = "fuelLevelSensor", fuelLevelSensor
+ field = "Baro ADC input", baroSensor_hwChannel
+ field = "pedal Position Channel", pedalPositionChannel
+ field = "Primary input channel", triggerInputPins1
+ field = "Secondary channel", triggerInputPins2
+ field = "Cam Sync/VVT input", camInput
+ field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin
+ field = "clutchDownPin", clutchDownPin
+ field = "clutchUpPin", clutchUpPin
+
+ dialog = allPins2
+ field = "Tachometer output Pin", tachOutputPin
+ field = "Dizzy out Pin", dizzySparkOutputPin
+ field = "O2 heater pin", o2heaterPin
+ field = "Idle Solenoid Pin", idle_solenoidPin
+ field = "Idle Stepper Dir", idle_stepperDirectionPin
+ field = "Idle Stepper Step", idle_stepperStepPin
+ field = "Idle Stepper Enable", stepperEnablePin
+ field = "Fuel Pump Pin", fuelPumpPin
+ field = "ETB Dir #1", etbDirectionPin1
+ field = "ETB Dir #2", etbDirectionPin2
+ field = "ETB Control #1", etbControlPin1
+ field = "ETB Control #2", etbControlPin2
+ field = "SD CS Pin", sdCardCsPin
+ field = "Check Engine Pin", malfunctionIndicatorPin
+
+ dialog = allPins3
+ field = "Injection Pin 1", injectionPins1
+ field = "Injection Pin 2", injectionPins2
+ field = "Injection Pin 3", injectionPins3
+ field = "Injection Pin 4", injectionPins4
+ field = "Injection Pin 5 ", injectionPins5
+ field = "Injection Pin 6 ", injectionPins6
+ field = "Injection Pin 7 ", injectionPins7
+ field = "Injection Pin 8 ", injectionPins8
+ field = "Injection Pin 9 ", injectionPins9
+ field = "Injection Pin 10 ", injectionPins10
+ field = "Injection Pin 11 ", injectionPins11
+ field = "Injection Pin 12 ", injectionPins12
+
+ field = "Ignition Pin 1", ignitionPins1
+ field = "Ignition Pin 2", ignitionPins2
+ field = "Ignition Pin 3", ignitionPins3
+ field = "Ignition Pin 4", ignitionPins4
+ field = "Ignition Pin 5", ignitionPins5
+ field = "Ignition Pin 6", ignitionPins6
+ field = "Ignition Pin 7", ignitionPins7
+ field = "Ignition Pin 8", ignitionPins8
+ field = "Ignition Pin 9", ignitionPins9
+ field = "Ignition Pin 10", ignitionPins10
+ field = "Ignition Pin 11", ignitionPins11
+ field = "Ignition Pin 12", ignitionPins12
+
+ dialog = allPins4
+ field = "FSIO dig inp #1", fsioDigitalInputs1
+ field = "FSIO dig inp #2", fsioDigitalInputs2
+ field = "FSIO dig inp #3", fsioDigitalInputs3
+ field = "FSIO dig inp #4", fsioDigitalInputs4
+ field = "FSIO dig inp #5", fsioDigitalInputs5
+ field = "FSIO dig inp #6", fsioDigitalInputs6
+ field = "FSIO dig inp #7", fsioDigitalInputs7
+ field = "FSIO dig inp #8", fsioDigitalInputs8
+ field = "FSIO dig inp #9", fsioDigitalInputs9
+
+
+
+ dialog = allPins1_2, "", xAxis
+ panel = allPins1
+ panel = allPins2
+
+ dialog = allPins3_4, "", xAxis
+ panel = allPins3
+ panel = allPins4
+
+ dialog = allPins, "All Pins", xAxis
+ panel = allPins1_2
+ panel = allPins3_4
+
+
+; Engine->CLT Thermistor Settings
+ dialog = clt_thermistor, "CLT Thermistor Settings"
+ field = "!Here is three pairs of thermistor temperature and his resistance."
+ field = "!Typical temperatures is -40°C, 0°C and 100°C"
+ field = ""
+ field = "Lowest temperature", clt_tempC_1
+ field = "Resistance @ LT", clt_resistance_1
+ field = ""
+ field = "Middle temperature", clt_tempC_2
+ field = "Resistance @ MT", clt_resistance_2
+ field = ""
+ field = "Highest temperature", clt_tempC_3
+ field = "Resistance @ HT", clt_resistance_3
+ dialog = cltSensor_IO, "CLT Sensor I/O"
+ field = "CLT ADC input", clt_adcChannel
+ field = "Bias Resistor Value", clt_bias_resistor
+ dialog = cltSensor, "", yAxis
+ panel = clt_thermistor, North
+ panel = cltSensor_IO, South
+
+; Engine->IAT Thermistor Settings
+ dialog = iat_thermistor, "IAT Thermistor Settings"
+ field = "!Here is three pairs of thermistor temperature and his resistance."
+ field = "!Typical temperatures is -40°C, 0°C and 100°C"
+ field = ""
+ field = "Lowest temperature", iat_tempC_1
+ field = "Resistance @ LT", iat_resistance_1
+ field = ""
+ field = "Middle temperature", iat_tempC_2
+ field = "Resistance @ MT", iat_resistance_2
+ field = ""
+ field = "Highest temperature", iat_tempC_3
+ field = "Resistance @ HT", iat_resistance_3
+ dialog = iatSensor_IO, "IAT Sensor I/O"
+ field = "IAT ADC input", iat_adcChannel
+ field = "Bias Resistor Value", iat_bias_resistor
+ dialog = iatSensor, "", yAxis
+ panel = iat_thermistor, North
+ panel = iatSensor_IO, South
+
+; Engine->MAP Sensor Settings
+ dialog = mapSensorVDlg, "Voltage Sensor Settings", xAxis
+ field = "MAP ADC input", map_sensor_hwChannel, {hasFrequencyReportingMapSensor == 0}
+ field = "Map type", map_sensor_type, {hasFrequencyReportingMapSensor == 0}
+ field = "MAP value low point", map_sensor_lowValue, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
+ field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
+ field = "MAP value high point", map_sensor_highValue, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
+ field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_type == 0 && hasFrequencyReportingMapSensor == 0}
+
+ dialog = mapSensorFDlg, "Frequency Sensor Settings", xAxis
+ field = "pin", frequencyReportingMapInputPin, {hasFrequencyReportingMapSensor == 1}
+ field = "0 kPa freq", mapFrequency0Kpa, {hasFrequencyReportingMapSensor == 1}
+ field = "100 kpa freq", mapFrequency100Kpa, {hasFrequencyReportingMapSensor == 1}
+
+ dialog = mapCurves, "", border
+ panel = map_samplingAngleCurve, West
+ panel = map_samplingWindowCurve, East
+
+ dialog = mapSwitch, "MAP input type"
+ field = "frequency-based MAP", hasFrequencyReportingMapSensor
+
+ dialog = mapVandF, "V and F"
+ panel = mapSensorVDlg, North
+ panel = mapSensorFDlg, South
+
+ dialog = mapSwitchAndSettings, "Switch and Settings"
+ field = "!ECU reboot needed to apply pin assignment"
+ panel = mapSwitch, North
+ panel = mapVandF, South
+
+ dialog = mapSettings, "MAP Sensor Settings", border
+ panel = mapCurves, North
+ panel = mapSwitchAndSettings, South
+
+; Engine->EGO Sensor Settings
+ dialog = egoSettings_sensor, "EGO Sensor Settings"
+ field = "low voltage", afr_v1
+ field = "low value", afr_value1
+ field = "high voltage", afr_v2
+ field = "high value", afr_value2
+ field = "Correction", egoValueShift
+ dialog = egoSettings_IO, "EGO Sensor I/O"
+ field = "AFR ADC input", afr_hwChannel
+ field = "O2 heater pin", o2heaterPin
+ dialog = egoSettings, "", yAxis
+ panel = egoSettings_sensor, North
+ panel = egoSettings_IO, South
+
+; Engine->EGT inputs
+ dialog = egtInputs, "EGT inputs"
+ field = "SPI", max31855spiDevice
+ field = "CS #1", max31855_cs1
+ field = "CS #2", max31855_cs2
+ field = "CS #3", max31855_cs3
+ field = "CS #4", max31855_cs4
+ field = "CS #5", max31855_cs5
+ field = "CS #6", max31855_cs6
+ field = "CS #7", max31855_cs7
+ field = "CS #8", max31855_cs8
+
+; Engine->idle Settings
+ dialog = idleSolenoid, "solenoid"
+ field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle
+ field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle
+ field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle
+
+ dialog = idleStepper, "stepper"
+ field = "Idle Stepper Step", idle_stepperStepPin, useStepperIdle
+ field = "Idle Stepper Dir", idle_stepperDirectionPin, useStepperIdle
+ field = "Idle Stepper Enable", stepperEnablePin, useStepperIdle
+ field = "Idle Stepper Enable mode", stepperEnablePinMode, useStepperIdle
+ field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle
+ field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle
+
+ dialog = idleType, "Type idle valve", border
+ panel = idleSolenoid, West
+ panel = idleStepper, East
+
+ dialog = idleSettings, "", yAxis
+ field = "Manual mode", idleMode
+ field = "Cranking Extra", crankingIdleAdjustment
+ field = "Auto target", targetIdleRpm, { idleMode == 0}
+ field = "idle P", idleRpmPid_pFactor
+ field = "idle I", idleRpmPid_iFactor
+ field = "idle D", idleRpmPid_dFactor
+ field = "idle offset", idleRpmPid_offset
+ slider = "Manual Idle Position", manIdlePosition, horizontal
+ field = ""
+ field = "use stepper", useStepperIdle
+ panel = idleType
+
+; Engine->Fan Settings
+ dialog = fanSetting, "Fan Settings"
+ field = "Fan On Temperature", fanOnTemperature
+ field = "Fan Off Temperature", fanOffTemperature
+ field = ""
+ field = "!ECU reboot needed to apply these settings"
+ field = "Fan Pin Mode", fanPinMode
+ field = "Fan Pin", fanPin
+
+; Engine->Main Relay Settings
+ dialog = mainRealay, "Main Relay Settings"
+ field = "!ECU reboot needed to apply these settings"
+ field = "Main Relay Mode", mainRelayPinMode
+ field = "Main Relay Pin", mainRelayPin
+
+; Engine->Fuel Pump Settings
+ dialog = fuelPump, "Fuel Pump Settings"
+ field = "!ECU reboot needed to apply these settings"
+ field = "Fuel Pump Pin Mode", fuelPumpPinMode
+ field = "Fuel Pump Pin", fuelPumpPin
+
+; Engine->MIL Settings
+ dialog = malfunction, "Check Engine Settings"
+ field = "!ECU reboot needed to apply these settings"
+ field = "Check Engine Pin Mode", malfunctionIndicatorPinMode
+ field = "Check Engine Pin", malfunctionIndicatorPin
+ field = "Warning Period", warningPeriod
+
+; Engine->hip9011 Settings
+ dialog = hipFunction, "HIP9011 Settings (knock decoder)"
+ field = "Enabled", isHip9011Enabled
+ field = "Threshold", knockVThreshold, {isHip9011Enabled == 1}
+ field = "!ECU reboot needed to apply these settings"
+ field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1}
+ field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1}
+ field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1}
+ field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1}
+ field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1}
+ field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1}
+ field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1}
+ field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1}
+ field = "SPI2sck", spi2SckMode, {isHip9011Enabled == 1}
+ field = "SPI2mosi", spi2MosiMode, {isHip9011Enabled == 1}
+ field = "SPI2miso", spi2MisoMode, {isHip9011Enabled == 1}
+ panel = knockThresholdCurve
+
+; Engine->cj125 Settings
+ dialog = cj125Function, "CJ125 Settings (wbo decoder)"
+ field = "Enabled", isCJ125Enabled
+ field = "!ECU reboot needed to apply these settings"
+ field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1}
+ field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1}
+ field = "SPI device", cj125SpiDevice
+ field = "UA input", cj125ua, {isCJ125Enabled == 1}
+ field = "UR input", cj125ur, {isCJ125Enabled == 1}
+
+ dialog = spiFunction, "SPI settings"
+ field = "!ECU reboot needed to apply these settings"
+ field = "SPI1 enable", is_enabled_spi_1
+ field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1}
+ field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1}
+ field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1}
+ field = "SPI2 enable", is_enabled_spi_2
+ field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1}
+ field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1}
+ field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1}
+ field = "SPI3 enable", is_enabled_spi_3
+ field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1}
+ field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1}
+ field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1}
+
+ dialog = fuelClosedLoopDialog, "Fuel closed-loop correction"
+ field = "Enabled", fuelClosedLoopCorrectionEnabled
+ field = "!No correction below these value"
+ field = "CLT - low threshod", fuelClosedLoopCltThreshold, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "RPM - low threshod", fuelClosedLoopRpmThreshold, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "EGO - low threshod", fuelClosedLoopAfrLowThreshold, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "!No correction above these value"
+ field = "TPS - high threshod", fuelClosedLoopTpsThreshold, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "EGO - high threshod", fuelClosedLoopAfrHighThreshold, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "!PID settings"
+ field = "P factor", fuelClosedLoopPid_pFactor, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "I factor", fuelClosedLoopPid_iFactor, {fuelClosedLoopCorrectionEnabled == 1}
+ field = "D factor", fuelClosedLoopPid_dFactor, {fuelClosedLoopCorrectionEnabled == 1}
+
+
+ dialog = auxPidDialog, "Aux PID"
+ field = "Enabled", activateAuxPid1
+ field = "FSIO pin #1", auxPidPins1
+ field = "PWM Frequency", auxPidFrequency1
+ field = "verbose", isVerboseAuxPid1
+ field = "#target based on FSIO map#1"
+ field = "control period", auxPidDT1, {activateAuxPid1 == 1}
+ field = "#PID control"
+ field = "offset", auxPid1_offset, {activateAuxPid1 == 1}
+ field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1}
+ field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1}
+ field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1}
+ field = "FSIO pin #2", auxPidPins2
+ field = "FSIO pin #3", auxPidPins3
+ field = "FSIO pin #4", auxPidPins4
+
+; Engine->Battery & Alternator
+ dialog = batteryDialog, "Battery Settings", yAxis
+ field = "vBatt ADC input", vbattAdcChannel
+ field = "Battery Input Divider Coefficient", vbattDividerCoeff
+ dialog = alternator, "Alternator Settings", yAxis
+ field = "Enabled", isAlternatorControlEnabled
+ field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1}
+ field = "Target", targetVBatt, {isAlternatorControlEnabled == 1}
+ field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1}
+ field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1}
+ field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
+ field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1}
+ field = "Verbose", isVerboseAlternator, {isAlternatorControlEnabled == 1}
+ field = "control period", alternatorDT, {isAlternatorControlEnabled == 1}
+ field = "#PID control"
+ field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
+ field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
+ field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
+ field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0}
+ field = "#% duty = Pterm + Iterm + Dterm + offset%"
+
+
+ dialog = warmupFuelDialog, "Warmup fuel closed-loop", yAxis
+ field = "use automatic Pid Afr control", useWarmupPidAfr
+ field = "warmup temperature Threshold", warmupAfrThreshold
+ field = "wa offset", warmupAfrPid_offset
+ field = "wa P factor", warmupAfrPid_pFactor
+ field = "wa I factor", warmupAfrPid_iFactor
+ field = "wa D factor", warmupAfrPid_dFactor
+ field = "#correction = Pterm + Iterm + Dterm + offset"
+
+
+ dialog = energySystems, "Battery and Alternator Settings", yAxis
+ panel = batteryDialog
+ panel = alternator
+
+; Engine->Speed Sensor
+ dialog = speedSensor, "Speed Sensor Settings"
+ field = "Input pin", vehicleSpeedSensorInputPin
+ field = "revolution to speed mult", vehicleSpeedCoef
+
+; Engine->Other inputs
+ dialog = analogInputs, "Analog inputs"
+ field = "!ECU reboot needed to apply these settings"
+ field = "TPS ADC input", tpsAdcChannel
+ field = "TPS low value detection threshold", tpsErrorDetectionTooLow
+ field = "TPS high value detection threshold", tpsErrorDetectionTooHigh
+ field = "!todo: move MAF channel to maf curve dialog"
+ field = "MAF ADC input", mafAdcChannel
+ field = "Baro ADC input", baroSensor_hwChannel
+ field = "Analog divider", analogInputDividerCoefficient
+ field = "Use BiQuad averaging", useBiQuadAnalogFiltering
+ field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0}
+ field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1}
+ field = "Bi_Q a1", biQuad_a1, {useBiQuadAnalogFiltering == 1}
+ field = "Bi_Q a2", biQuad_a2, {useBiQuadAnalogFiltering == 1}
+ field = "Bi_Q b1", biQuad_b1, {useBiQuadAnalogFiltering == 1}
+ field = "Bi_Q b2", biQuad_b2, {useBiQuadAnalogFiltering == 1}
+
+ dialog = tachSettings, "Tachometer output"
+ field = "!See also dizzySparkOutputPin"
+ field = "pin", tachOutputPin
+ field = "pin mode", tachOutputPinMode
+ field = "rise at trigger index", tachPulseTriggerIndex
+ field = "pulse duration", tachPulseDuractionMs
+
+
+; Board->Connection
+ dialog = tsPort, "TunerStudio Port"
+ field = "startConsoleInBinaryMode", startConsoleInBinaryMode
+ field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed
+ field = "Use PC10/PC11 serial?", useSerialPort
+ field = "startConsoleInBinaryMode", startConsoleInBinaryMode
+
+ dialog = canBus, "CAN Bus"
+ field = "Can Read Enabled", canReadEnabled
+ field = "Can Write Enabled", canWriteEnabled
+; field = "Can Nbc Type", canNbcType
+ field = "Can Sleep Period", canSleepPeriod
+ field = "TX pin", canTxPin
+ field = "RX pin", canRxPin
+
+ dialog = sdCard, "SD Card Logger"
+ field = "SdCard", isSdCardEnabled
+ field = "CS Pin", sdCardCsPin
+ field = "log format", logFormat
+ field = "Mass Storage", storageMode
+
+ dialog = gpsReceiver, "GPS Receiver"
+ field = "gps RX", gps_rx_pin
+ field = "gps TX", gps_tx_pin
+
+ dialog = lcdScreen, "LCD screen"
+ field = "display Mode", displayMode
+ field = "height", HD44780height
+ field = "width", HD44780width
+ field = "RS pin", HD44780_rs
+ field = "E pin", HD44780_e
+ field = "D4 pin", HD44780_db4
+ field = "D5 pin", HD44780_db5
+ field = "D6 pin", HD44780_db6
+ field = "D7 pin", HD44780_db7
+
+ dialog = connectRight, "", yAxis
+ panel = tsPort
+ panel = canBus
+ panel = sdCard
+ panel = gpsReceiver
+
+ dialog = connection, "", border
+ panel = lcdScreen, East
+ panel = connectRight, West
+
+ dialog = joystickPanel, "Joystick"
+ field = "joustick center button", joystickCenterPin
+ field = "joustick button A", joystickAPin
+ field = "joustick button B", joystickBPin
+ field = "joustick button C", joystickCPin
+ field = "joustick button D", joystickDPin
+
+ dialog = monitoringSettings, "rusEfi Console Settings"
+ field = "Sensor Sniffer", sensorChartMode
+ field = " Threshold", sensorSnifferRpmThreshold
+ field = " Each X cycle", sensorChartFrequency
+ field = "Engine Sniffer", isEngineChartEnabled
+ field = " Threshold", engineSnifferRpmThreshold
+
+
+
+; Tuning->General
+ dialog = generalSettings, "General"
+ field = "RPM Hard Limit", rpmHardLimit
+ field = "Boost Cut Pressure", boostCutPressure
+ field = ""
+ field = "Fuel Algorithm", fuelAlgorithm
+ field = ""
+ field = "#System hack's"
+ field = "Global fuel correction", globalFuelCorrection
+ field = "Ignition Math Logic @", ignMathCalculateAtIndex
+ field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex
+ field = "comm status pin", communicationPin
+ field = "running status", runningPin
+
+ dialog = crankingFuel, "Fuel"
+ field = "Injection Mode", crankingInjectionMode
+ field = "Base Fuel Pulse Width", cranking_baseFuel
+
+
+ dialog = crankingIgnition, "Ignition"
+ field = "Advance", crankingTimingAngle
+ field = "Use fixed Dwell?", useConstantDwellDuringCranking
+ field = "Fixed Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1}
+ field = "Charge Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0}
+
+ dialog = postCrankingEnrichment, "Post-cranking short-time fuel enrichment"
+ field = "Target temperature", postCrankingTargetClt
+ field = "Post-Cranking factor", postCrankingFactor
+ field = "Duraction", postCrankingDurationSec
+
+
+; Tuning->Cranking
+ dialog = crankingDialog, "Cranking"
+ field = "Cranking RPM limit", cranking_rpm
+ panel = crankingFuel
+ panel = crankingIgnition
+ panel = postCrankingEnrichment
+ field = ""
+ field = ""
+ field = "enable Cylinder Cleanup", isCylinderCleanupEnabled
+
+
+ dialog = EngineLoadAccelPanel, "Engine Load"
+ field = "Length", engineLoadAccelLength
+ field = "Accel Threshold", engineLoadAccelEnrichmentThreshold
+ field = "Accel Multiplier", engineLoadAccelEnrichmentMultiplier
+ field = "Decel Threshold", engineLoadDecelEnleanmentThreshold
+ field = "Decel Multiplier", engineLoadDecelEnleanmentMultiplier
+
+ dialog = TpsAccelPanel, "TPS"
+ field = "Length", tpsAccelLength
+ field = "Accel Threshold", tpsAccelEnrichmentThreshold
+ field = "Decel Threshold", tpsDecelEnleanmentThreshold
+; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier
+
+; Tuning->AccelEnrichment
+ dialog = AccelEnrich, "Accel/Decel Enrichment"
+ panel = EngineLoadAccelPanel
+ panel = TpsAccelPanel
+ field = "sucked off wall coefficient", suckedOffCoef
+ field = "added to wall coef", addedToWallCoef
+
+
+; Flex Logic
+ dialog = fsioIO, "Outputs"
+ field = "output #1", fsioPins1
+ field = "output #2", fsioPins2
+ field = "output #3", fsioPins3
+ field = "output #4", fsioPins4
+ field = "output #5", fsioPins5
+ field = "output #6", fsioPins6
+ field = "output #7", fsioPins7
+ field = "output #8", fsioPins8
+ field = "output #9", fsioPins9
+ field = "output #10", fsioPins10
+ field = "output #11", fsioPins11
+ field = "output #12", fsioPins12
+ field = "output #13", fsioPins13
+ field = "output #14", fsioPins14
+ field = "output #15", fsioPins15
+ field = "output #16", fsioPins16
+ field = ""
+ field = ""
+
+ dialog = fsioFrequency, "Frequency"
+ field = "freq #1", fsioFrequency1
+ field = "freq #2", fsioFrequency2
+ field = "freq #3", fsioFrequency3
+ field = "freq #4", fsioFrequency4
+ field = "freq #5", fsioFrequency5
+ field = "freq #6", fsioFrequency6
+ field = "freq #7", fsioFrequency7
+ field = "freq #8", fsioFrequency8
+ field = "freq #9", fsioFrequency9
+ field = "freq #10", fsioFrequency10
+ field = "freq #11", fsioFrequency11
+ field = "freq #12", fsioFrequency12
+ field = "freq #13", fsioFrequency13
+ field = "freq #14", fsioFrequency14
+ field = "freq #15", fsioFrequency15
+ field = "freq #16", fsioFrequency16
+ field = ""
+ field = ""
+
+ dialog = fsioSetting, "Setting"
+ field = "Set number is not associated with the output number."
+ field = "Set number, only the cell number with some numbers."
+ field = "set #1", fsio_setting1
+ field = "set #2", fsio_setting2
+ field = "set #3", fsio_setting3
+ field = "set #4", fsio_setting4
+ field = "set #5", fsio_setting5
+ field = "set #6", fsio_setting6
+ field = "set #7", fsio_setting7
+ field = "set #8", fsio_setting8
+ field = "set #9", fsio_setting9
+ field = "set #10", fsio_setting10
+ field = "set #11", fsio_setting11
+ field = "set #12", fsio_setting12
+ field = "set #13", fsio_setting13
+ field = "set #14", fsio_setting14
+ field = "set #15", fsio_setting15
+ field = "set #16", fsio_setting16
+
+ dialog = fsioOutputsDialog, "FSIO outputs", border
+ panel = fsioIO, West
+ panel = fsioFrequency, Center
+ panel = fsioSetting, East
+
+
+ dialog = fsioInputsDialog, "FSIO inputs"
+ field = "ADC #1", fsioAdc1
+ field = "ADC #2", fsioAdc2
+ field = "ADC #3", fsioAdc3
+ field = "ADC #4", fsioAdc4
+
+ dialog = etbDialog, "Electronic Thtottle Body (alpha)"
+ field = "pedal Position Channel", pedalPositionChannel
+ field = "Pedal min", pedalPositionMin
+ field = "Pedal max", pedalPositionMax
+ field = "PWM Frequency", etbFreq
+ field = "Dir #1", etbDirectionPin1
+ field = "Dir #2", etbDirectionPin2
+ field = "Control #1", etbControlPin1
+ field = "Control #2", etbControlPin2
+
+ dialog = testSpark, "Spark"
+ commandButton = "Spark #1", cmd_test_spk1
+ commandButton = "Spark #2", cmd_test_spk2
+ commandButton = "Spark #3", cmd_test_spk3
+ commandButton = "Spark #4", cmd_test_spk4
+ commandButton = "Spark #5", cmd_test_spk5
+ commandButton = "Spark #6", cmd_test_spk6
+ commandButton = "Spark #7", cmd_test_spk7
+ commandButton = "Spark #8", cmd_test_spk8
+
+ dialog = testInjectors, "Fuel"
+ commandButton = "Injector #1", cmd_test_inj1
+ commandButton = "Injector #2", cmd_test_inj2
+ commandButton = "Injector #3", cmd_test_inj3
+ commandButton = "Injector #4", cmd_test_inj4
+ commandButton = "Injector #5", cmd_test_inj5
+ commandButton = "Injector #6", cmd_test_inj6
+ commandButton = "Injector #7", cmd_test_inj7
+ commandButton = "Injector #8", cmd_test_inj8
+
+ dialog = testMisc, "Misc"
+ commandButton = "Fuel Pump", cmd_test_fuel_pump
+ commandButton = "Radiator Fan", cmd_test_radiator_fan
+ commandButton = "Check Engine", cmd_test_check_engine_light
+ commandButton = "Idle Air Valve", cmd_test_idle_valve
+
+ dialog = ioTest, "I-O Test", border
+ panel = testSpark, West
+ panel = testInjectors, Center
+ panel = testMisc, East
+
+
+; Board->ECU stimulator
+ dialog = ecuStimulator, "ECU stimulator"
+ field = "Trigger Simulator", triggerSimulatorFrequency
+ field = "self-stimulation", directSelfStimulation
+ field = ""
+ field = "digipot spi", digitalPotentiometerSpiDevice
+ field = "digipot CS #0", digitalPotentiometerChipSelect1
+ field = "digipot CS #1", digitalPotentiometerChipSelect2
+ field = "digipot CS #2", digitalPotentiometerChipSelect3
+ field = "digipot CS #3", digitalPotentiometerChipSelect4
+ field = ""
+ field = "trigger stimulator pin #1", triggerSimulatorPins1
+ field = "trigger stimulator pin #2", triggerSimulatorPins2
+ field = "trigger stimulator pin #3", triggerSimulatorPins3
+ field = ""
+ field = "Logic input channel 1", logicAnalyzerPins1
+ field = "Logic input channel 2", logicAnalyzerPins2
+ field = "Logic input channel 3", logicAnalyzerPins3
+ field = "Logic input channel 4", logicAnalyzerPins4
+ field = ""
+ field = "Engine chart size", engineChartSize
+
+ ; Racing Features->Launch Control
+ dialog = smLaunchControl, "Launch Control Settings"
+ field = "RPM Step1 Limit", step1rpm
+ field = "Launch RPM Window" step1RpmWindow
+ field = "Step1 Ignition Advance", step1timing
+ field = "Use Spark Cut", step1SparkCutEnable
+ field = "Use Fuel Cut", step1fuelCutEnable
+ field = "clutchDownPin", clutchDownPin
+ field = "clutchUpPin", clutchUpPin
+
diff --git a/firmware/util/crc.h b/firmware/util/crc.h
index 169d778b94..4c5a77dd8d 100644
--- a/firmware/util/crc.h
+++ b/firmware/util/crc.h
@@ -1,27 +1,27 @@
-/**
- * @file crc.h
- *
- * @date Sep 20, 2013
- * @author Andrey Belomutskiy, (c) 2012-2017
- */
-
-#ifndef CRC_H_
-#define CRC_H_
-
-#include "stdint.h"
-
-typedef unsigned char crc_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-crc_t calc_crc(const crc_t message[], int nBytes);
-uint32_t crc32(const void *buf, uint32_t size);
-uint32_t crc32inc(const void *buf, uint32_t crc, uint32_t size);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CRC_H_ */
+/**
+ * @file crc.h
+ *
+ * @date Sep 20, 2013
+ * @author Andrey Belomutskiy, (c) 2012-2017
+ */
+
+#ifndef CRC_H_
+#define CRC_H_
+
+#include "stdint.h"
+
+typedef unsigned char crc_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+crc_t calc_crc(const crc_t message[], int nBytes);
+uint32_t crc32(const void *buf, uint32_t size);
+uint32_t crc32inc(const void *buf, uint32_t crc, uint32_t size);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* CRC_H_ */