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_ */