diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index 3a65b143ae..d01e3a5d6e 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -18,6 +18,7 @@ jobs: # Board configurations - build-target: frankenso_na6 folder: frankenso + ini-file: rusefi_frankenso_na6.ini - build-target: kinetis folder: kinetis @@ -28,7 +29,7 @@ jobs: - build-target: mre_f4_hardware_QC_special_build folder: microrusefi - ini-file: rusefi_microrusefi.ini + ini-file: rusefi_mre_f4.ini - build-target: mre_f7 folder: microrusefi diff --git a/README.md b/README.md index 2475d828a3..3f516cd520 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ See https://rusefi.com/forum/viewtopic.php?f=5&t=9 | Release date | Revision | Details | | ------------ | --------- | ------- | +| 07/26/2020 | r24635 | improvement #1637: DC motor idle air valve for late 90s German vehicles | +| 07/21/2020 | | bugfix #1592 injectors could stay open on transition from cranking to running under certain conditions | | 06/17/2020 | r23656 | bugfix #1491 major performance/scheduling improvement | | 05/21/2020 | r22961 | rusEFI console start-up time improvements | | 04/18/2020 | r22231 | Renix 44-2-2 trigger support added | diff --git a/android/app/build.gradle b/android/app/build.gradle index 6e5ee981a4..b04cd8cb2f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -16,6 +16,7 @@ android { defaultConfig { applicationId "com.rusefi.app" + // Version 21 = Android_5.0_Lollipop minSdkVersion 21 targetSdkVersion 30 versionCode 1 diff --git a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java index 629cd0577f..9a2a164db2 100644 --- a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java +++ b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java @@ -7,7 +7,6 @@ import com.hoho.android.usbserial.driver.ProbeTable; import com.hoho.android.usbserial.driver.UsbSerialDriver; import com.hoho.android.usbserial.driver.UsbSerialPort; import com.hoho.android.usbserial.driver.UsbSerialProber; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.dfu.DfuLogic; @@ -31,9 +30,9 @@ public class AndroidSerial extends AbstractIoStream { return prober.findAllDrivers(usbManager); } - public AndroidSerial(UsbSerialPort usbSerialPort, Logger logger) { + public AndroidSerial(UsbSerialPort usbSerialPort) { this.usbSerialPort = usbSerialPort; - dataBuffer = IncomingDataBuffer.createDataBuffer("", this, logger); + dataBuffer = IncomingDataBuffer.createDataBuffer("", this); } @Override @@ -49,7 +48,7 @@ public class AndroidSerial extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { ByteReader reader = buffer -> usbSerialPort.read(buffer, 5000); - ByteReader.runReaderLoop("", listener, reader, Logger.CONSOLE); + ByteReader.runReaderLoop("", listener, reader, this); } @Override diff --git a/android/app/src/main/java/com/rusefi/app/rusEFI.java b/android/app/src/main/java/com/rusefi/app/rusEFI.java index ad6414ede8..4f0e05ef26 100644 --- a/android/app/src/main/java/com/rusefi/app/rusEFI.java +++ b/android/app/src/main/java/com/rusefi/app/rusEFI.java @@ -34,7 +34,6 @@ import android.widget.TextView; import com.hoho.android.usbserial.driver.UsbSerialDriver; import com.hoho.android.usbserial.driver.UsbSerialPort; -import com.opensr5.Logger; import com.rusefi.Listener; import com.rusefi.dfu.DfuConnection; import com.rusefi.dfu.DfuImage; @@ -233,9 +232,9 @@ public class rusEFI extends Activity { port.open(connection); port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); - AndroidSerial serial = new AndroidSerial(port, Logger.CONSOLE); + AndroidSerial serial = new AndroidSerial(port); mResultView.append("Switching to DFU\n"); - DfuHelper.sendDfuRebootCommand(serial, new StringBuilder(), Logger.CONSOLE); + DfuHelper.sendDfuRebootCommand(serial, new StringBuilder()); } catch (IOException e) { throw new IllegalStateException(e); diff --git a/firmware/bootloader/compile_bootloader.sh b/firmware/bootloader/compile_bootloader.sh index a8c7b4faae..a374a38472 100644 --- a/firmware/bootloader/compile_bootloader.sh +++ b/firmware/bootloader/compile_bootloader.sh @@ -11,13 +11,13 @@ BOOTLOADER_CODE_DESTINATION_FILE=$BOOTLOADER_CODE_DESTINATION_PATH/bootloader_ge echo "$SCRIPT_NAME: Starting bootloader compilation..." make -j4 -f src/Makefile $1 $2 $3 -[ $? -eq 0 ] || { echo "make compilation failed"; exit 1; } +# downstream scripts detect error condition by checking if the output file exists so we need to make sure we remove it +[ $? -eq 0 ] || { echo "ERROR: bootloader compilation failed"; rm -f blbuild/$BOOTLOADER_CODE_DESTINATION_FILE ; exit 1; } echo "$SCRIPT_NAME: Bootloader build success." cd blbuild # Generate a header file with binary bootloader code -rm -f $BOOTLOADER_CODE_DESTINATION_FILE java -jar ../../../java_tools/bin2header.jar bootloader.bin "$BOOTLOADER_CODE_DESTINATION_FILE" "$BOOTLOADER_COMMENT static const volatile uint8_t bootloader_code[] BOOTLOADER_SECTION" [ $? -eq 0 ] || { echo "$SCRIPT_NAME: error generating header file"; exit 1; } cd .. diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index c27c61ccc1..c3946b9bc1 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -593,6 +593,10 @@ case LM_REAL_MAF: return "LM_REAL_MAF"; case LM_SPEED_DENSITY: return "LM_SPEED_DENSITY"; +case LM_ALPHA_N_2: + return "LM_ALPHA_N_2"; +case LM_MOCK: + return "LM_MOCK"; } return NULL; } @@ -776,6 +780,10 @@ case GPPWM_Map: return "GPPWM_Map"; case GPPWM_Tps: return "GPPWM_Tps"; +case GPPWM_FuelLoad: + return "GPPWM_FuelLoad"; +case GPPWM_IgnLoad: + return "GPPWM_IgnLoad"; } return NULL; } diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 15b818b643..8e9d809a92 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -1460,8 +1460,8 @@ struct engine_configuration_s { offset 744 bit 26 */ bool is_enabled_spi_4 : 1; /** - * Disable the electronic throttle motor for testing. - * This mode is for testing ETB position sensors, etc without actually driving the throttle. + * Disable the electronic throttle motor and DC idle motor for testing. + * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. offset 744 bit 27 */ bool pauseEtbControl : 1; /** @@ -1759,8 +1759,11 @@ struct engine_configuration_s { offset 976 bit 10 */ bool stftIgnoreErrorMagnitude : 1; /** + * Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve. + * Set the primary TPS to the cable-operated throttle's sensor + * Set the secondary TPS to the mini ETB's position sensor(s). offset 976 bit 11 */ - bool unusedBit_251_11 : 1; + bool dcMotorIdleValve : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -2140,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3530,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 3665dbfe00..adf82e7b03 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -276,6 +276,7 @@ #define cutSparkOnHardLimit_offset 1464 #define cylinderBore_offset 408 #define cylindersCount_offset 400 +#define dcMotorIdleValve_offset 976 #define debug_mode_e_enum "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44" #define debugMapAveraging_offset 807 #define debugMode_offset 2092 @@ -304,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -658,7 +659,7 @@ #define gppwm4_pwmFrequency_offset 4410 #define gppwm4_rpmBins_offset 4424 #define gppwm4_table_offset 4432 -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" #define gppwm_channel_size 88 #define GPPWM_CHANNELS 4 #define GPPWM_LOAD_COUNT 8 @@ -1074,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3833170085 +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2529711359 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.22.kin.3833170085" +#define TS_SIGNATURE "rusEFI 2020.07.28.kin.2529711359" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1378,7 +1379,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_11_offset 976 #define unusedBit_251_12_offset 976 #define unusedBit_251_13_offset 976 #define unusedBit_251_14_offset 976 diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 8468c44de3..123df8b9ef 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -166,6 +166,14 @@ static void setupDefaultSensorInputs() { // iat = "23 - AN temp 2" engineConfiguration->iat.adcChannel = EFI_ADC_1; engineConfiguration->iat.config.bias_resistor = 2700; + + setCommonNTCSensor(&engineConfiguration->auxTempSensor1, 2700); + setCommonNTCSensor(&engineConfiguration->auxTempSensor2, 2700); + +#if HW_CHECK_MODE + engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_2; + engineConfiguration->auxTempSensor2.adcChannel = EFI_ADC_3; +#endif // HW_CHECK_MODE } void setPinConfigurationOverrides(void) { diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index b05a22c134..3cb3af385f 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -898,10 +898,12 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin break; #endif /* ENABLE_PERF_TRACE */ case TS_GET_CONFIG_ERROR: { -#if HW_CHECK_MODE - #define configError "FACTORY_MODE_PLEASE_CONTACT_SUPPORT" -#else char * configError = getFirmwareError(); +#if HW_CHECK_MODE + // analog input errors are returned as firmware error in QC mode + if (!hasFirmwareError()) { + strcpy(configError, "FACTORY_MODE_PLEASE_CONTACT_SUPPORT"); + } #endif // HW_CHECK_MODE sr5SendResponse(tsChannel, TS_CRC, reinterpret_cast(configError), strlen(configError)); break; diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index e909f76461..a335f20fa0 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -323,7 +323,7 @@ static void showFuelInfo2(float rpm, float engineLoad) { #if EFI_ENGINE_CONTROL static void showFuelInfo(void) { - showFuelInfo2((float) GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); + showFuelInfo2((float) GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE)); } #endif diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 7ae34557e9..599a2e42b4 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -99,7 +99,11 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 -static SensorType indexToTpsSensor(size_t index) { +static SensorType indexToTpsSensor(size_t index, bool dcMotorIdleValve) { + if (dcMotorIdleValve) { + return SensorType::Tps2; + } + switch(index) { case 0: return SensorType::Tps1; default: return SensorType::Tps2; @@ -127,7 +131,8 @@ static percent_t currentEtbDuty; // this macro clamps both positive and negative percentages from about -100% to 100% #define ETB_PERCENT_TO_DUTY(x) (clampF(-ETB_DUTY_LIMIT, 0.01f * (x), ETB_DUTY_LIMIT)) -void EtbController::init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) { +void EtbController::init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) { + m_positionSensor = positionSensor; m_motor = motor; m_myIndex = ownIndex; m_pid.initPidClass(pidParameters); @@ -149,7 +154,7 @@ void EtbController::showStatus(Logging* logger) { } expected EtbController::observePlant() const { - return Sensor::get(indexToTpsSensor(m_myIndex)); + return Sensor::get(m_positionSensor); } void EtbController::setIdlePosition(percent_t pos) { @@ -162,6 +167,15 @@ expected EtbController::getSetpoint() const { return unexpected; } + // VW ETB idle mode uses an ETB only for idle (a mini-ETB sets the lower stop, and a normal cable + // can pull the throttle up off the stop.), so we directly control the throttle with the idle position. + if (CONFIG(dcMotorIdleValve)) { +#if EFI_TUNER_STUDIO + tsOutputChannels.etbTarget = m_idlePosition; +#endif // EFI_TUNER_STUDIO + return clampF(0, m_idlePosition, 100); + } + // If the pedal map hasn't been set, we can't provide a setpoint. if (!m_pedalMap) { return unexpected; @@ -195,7 +209,7 @@ expected EtbController::getSetpoint() const { if (m_myIndex == 0) { tsOutputChannels.etbTarget = targetPosition; } -#endif +#endif // EFI_TUNER_STUDIO return targetPosition; } @@ -736,14 +750,18 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { addConsoleActionI("etb_freq", setEtbFrequency); #endif /* EFI_PROD_CODE */ - // If you don't have a pedal, we have no business here. - if (!Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { + // If you don't have a pedal (or VW idle valve mode), we have no business here. + if (!CONFIG(dcMotorIdleValve) && !Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { return; } pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); - engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1; + if (CONFIG(dcMotorIdleValve)) { + engine->etbActualCount = 1; + } else { + engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1; + } for (int i = 0 ; i < engine->etbActualCount; i++) { auto motor = initDcMotor(i, CONFIG(etb_use_two_wires) PASS_ENGINE_PARAMETER_SUFFIX); @@ -751,7 +769,8 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // If this motor is actually set up, init the etb if (motor) { - engine->etbControllers[i]->init(motor, i, &engineConfiguration->etb, &pedal2tpsMap); + auto positionSensor = indexToTpsSensor(i, CONFIG(dcMotorIdleValve)); + engine->etbControllers[i]->init(positionSensor, motor, i, &engineConfiguration->etb, &pedal2tpsMap); INJECT_ENGINE_REFERENCE(engine->etbControllers[i]); } } diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index 5c120aac1e..e4b1ca666e 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -19,6 +19,7 @@ #include "engine.h" #include "closed_loop_controller.h" #include "expected.h" +#include "sensor.h" class DcMotor; class Logging; @@ -26,7 +27,7 @@ class Logging; class IEtbController : public ClosedLoopController { public: DECLARE_ENGINE_PTR; - virtual void init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) = 0; + virtual void init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) = 0; virtual void reset() = 0; virtual void setIdlePosition(percent_t pos) = 0; virtual void start() = 0; @@ -35,7 +36,7 @@ public: class EtbController : public IEtbController { public: - void init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) override; + void init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) override; void setIdlePosition(percent_t pos) override; void reset() override; void start() override {} @@ -74,6 +75,7 @@ protected: private: int m_myIndex = 0; + SensorType m_positionSensor = SensorType::Invalid; DcMotor *m_motor = nullptr; Pid m_pid; bool m_shouldResetPid = false; diff --git a/firmware/controllers/actuators/gppwm/gppwm_channel.cpp b/firmware/controllers/actuators/gppwm/gppwm_channel.cpp index b643092249..d975c5a789 100644 --- a/firmware/controllers/actuators/gppwm/gppwm_channel.cpp +++ b/firmware/controllers/actuators/gppwm/gppwm_channel.cpp @@ -7,6 +7,7 @@ #include "expected.h" #include "sensor.h" #include "map.h" +#include "engine_math.h" EXTERN_ENGINE; @@ -27,6 +28,10 @@ expected readGppwmChannel(gppwm_channel_e channel DECLARE_ENGINE_PARAMETE return Sensor::get(SensorType::Clt); case GPPWM_Iat: return Sensor::get(SensorType::Iat); + case GPPWM_FuelLoad: + return getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); + case GPPWM_IgnLoad: + return getIgnitionLoad(PASS_ENGINE_PARAMETER_SIGNATURE); default: return unexpected; } diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 20d5cd196a..a397d33a51 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -202,7 +202,9 @@ void setIdleMode(idle_mode_e value DECLARE_ENGINE_PARAMETER_SUFFIX) { showIdleInfo(); } -static void applyIACposition(percent_t position) { +#endif // EFI_UNIT_TEST + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX) { /** * currently idle level is an percent value (0-100 range), and PWM takes a float in the 0..1 range * todo: unify? @@ -216,12 +218,16 @@ static void applyIACposition(percent_t position) { } #if EFI_ELECTRONIC_THROTTLE_BODY - setEtbIdlePosition(position); -#endif + setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ELECTRONIC_THROTTLE_BODY #if ! EFI_UNIT_TEST - } if (CONFIG(useStepperIdle)) { + } else if (CONFIG(useStepperIdle)) { iacMotor.setTargetPosition(duty * engineConfiguration->idleStepperTotalSteps); #endif /* EFI_UNIT_TEST */ + } else if (CONFIG(dcMotorIdleValve)) { +#if EFI_ELECTRONIC_THROTTLE_BODY + setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ELECTRONIC_THROTTLE_BODY } else { if (!CONFIG(isDoubleSolenoidIdle)) { idleSolenoidOpen.setSimplePwmDutyCycle(duty); @@ -239,11 +245,13 @@ static void applyIACposition(percent_t position) { } } +#if ! EFI_UNIT_TEST + percent_t getIdlePosition(void) { return engine->engineState.idle.currentIdlePosition; } -void setIdleValvePosition(int positionPercent) { +void setManualIdleValvePosition(int positionPercent) { if (positionPercent < 1 || positionPercent > 99) return; scheduleMsg(logger, "setting idle valve position %d", positionPercent); @@ -571,11 +579,8 @@ static percent_t automaticIdleController(float tpsPos DECLARE_ENGINE_PARAMETER_S } engine->engineState.idle.currentIdlePosition = iacPosition; -#if ! EFI_UNIT_TEST - applyIACposition(engine->engineState.idle.currentIdlePosition); -#endif /* EFI_UNIT_TEST */ - } - + applyIACposition(engine->engineState.idle.currentIdlePosition PASS_ENGINE_PARAMETER_SUFFIX); +} IdleController idleControllerInstance; diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index 0f6e6bee39..b8a94fa45f 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -20,7 +20,10 @@ public: }; percent_t getIdlePosition(void); -void setIdleValvePosition(int positionPercent); + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX); +void setManualIdleValvePosition(int positionPercent); + void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); void setDefaultIdleParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE); void startIdleBench(void); diff --git a/firmware/controllers/algo/accel_enrichment.cpp b/firmware/controllers/algo/accel_enrichment.cpp index 1cac524bf7..9f57435073 100644 --- a/firmware/controllers/algo/accel_enrichment.cpp +++ b/firmware/controllers/algo/accel_enrichment.cpp @@ -315,7 +315,7 @@ void TpsAccelEnrichment::onEngineCycleTps(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } void LoadAccelEnrichment::onEngineCycle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - onNewValue(getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX); + onNewValue(getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX); } AccelEnrichment::AccelEnrichment() { diff --git a/firmware/controllers/algo/airmass/airmass.cpp b/firmware/controllers/algo/airmass/airmass.cpp new file mode 100644 index 0000000000..3ede8519e1 --- /dev/null +++ b/firmware/controllers/algo/airmass/airmass.cpp @@ -0,0 +1,10 @@ +#include "airmass.h" + +AirmassModelBase::AirmassModelBase(const ValueProvider3D& veTable) : m_veTable(&veTable) {} + +float AirmassModelBase::getVe(int rpm, float load) const { + efiAssert(OBD_PCM_Processor_Fault, m_veTable != nullptr, "VE table null", 0); + + // TODO: allow override of the Y axis value based on a config field + return m_veTable->getValue(rpm, load); +} diff --git a/firmware/controllers/algo/airmass/airmass.h b/firmware/controllers/algo/airmass/airmass.h index a5ad25950c..b9c157a18a 100644 --- a/firmware/controllers/algo/airmass/airmass.h +++ b/firmware/controllers/algo/airmass/airmass.h @@ -1,6 +1,24 @@ #pragma once +#include "engine.h" + +class ValueProvider3D; + struct AirmassResult { float CylinderAirmass = 0; float EngineLoadPercent = 100; }; + +struct AirmassModelBase { + DECLARE_ENGINE_PTR; + + AirmassModelBase(const ValueProvider3D& veTable); + virtual AirmassResult getAirmass(int rpm) = 0; + +protected: + // Retrieve the user-calibrated volumetric efficiency from the table + float getVe(int rpm, percent_t load) const; + +private: + const ValueProvider3D* const m_veTable; +}; diff --git a/firmware/controllers/algo/airmass/alphan_airmass.cpp b/firmware/controllers/algo/airmass/alphan_airmass.cpp new file mode 100644 index 0000000000..e9c081edb4 --- /dev/null +++ b/firmware/controllers/algo/airmass/alphan_airmass.cpp @@ -0,0 +1,27 @@ +#include "alphan_airmass.h" +#include "sensor.h" + +AirmassResult AlphaNAirmass::getAirmass(int rpm) { + auto tps = Sensor::get(SensorType::Tps1); + + if (!tps.Valid) { + // We are fully reliant on TPS - if the TPS fails, stop the engine. + return {}; + } + + // In this case, VE directly describes the cylinder filling relative to the ideal + float ve = getVe(rpm, tps.Value); + + // TODO: should this be barometric pressure and/or temperature compensated? + float airmass = getAirmassImpl( + ve / 100.0f, + 101.325f, // std atmosphere pressure + 273.0f + 20.0f // std atmosphere pressure + PASS_ENGINE_PARAMETER_SUFFIX + ); + + return { + airmass, + tps.Value + }; +} diff --git a/firmware/controllers/algo/airmass/alphan_airmass.h b/firmware/controllers/algo/airmass/alphan_airmass.h new file mode 100644 index 0000000000..aeb0201a83 --- /dev/null +++ b/firmware/controllers/algo/airmass/alphan_airmass.h @@ -0,0 +1,10 @@ +#pragma once + +#include "speed_density_base.h" + +class AlphaNAirmass : public SpeedDensityBase { +public: + AlphaNAirmass(const ValueProvider3D& veTable) : SpeedDensityBase(veTable) {} + + AirmassResult getAirmass(int rpm) override; +}; diff --git a/firmware/controllers/algo/airmass/maf_airmass.cpp b/firmware/controllers/algo/airmass/maf_airmass.cpp new file mode 100644 index 0000000000..7129b0746c --- /dev/null +++ b/firmware/controllers/algo/airmass/maf_airmass.cpp @@ -0,0 +1,46 @@ +#include "global.h" +#include "engine.h" +#include "maf_airmass.h" +#include "maf.h" + +EXTERN_ENGINE; + +AirmassResult MafAirmass::getAirmass(int rpm) { + float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); + return getAirmassImpl(maf, rpm); +} + +/** + * Function block now works to create a standardised load from the cylinder filling as well as tune fuel via VE table. + * @return total duration of fuel injection per engine cycle, in milliseconds + */ +AirmassResult MafAirmass::getAirmassImpl(float massAirFlow, int rpm) const { + // If the engine is stopped, MAF is meaningless + if (rpm == 0) { + return {}; + } + + // kg/hr -> g/s + float gramPerSecond = massAirFlow * 1000 / 3600; + + // 1/min -> 1/s + float revsPerSecond = rpm / 60.0f; + float airPerRevolution = gramPerSecond / revsPerSecond; + + // Now we have to divide among cylinders - on a 4 stroke, half of the cylinders happen every rev + // This math is floating point to work properly on engines with odd cyl count + float halfCylCount = CONFIG(specs.cylindersCount) / 2.0f; + + float cylinderAirmass = airPerRevolution / halfCylCount; + + //Create % load for fuel table using relative naturally aspiratedcylinder filling + float airChargeLoad = 100 * cylinderAirmass / ENGINE(standardAirCharge); + + //Correct air mass by VE table + float correctedAirmass = cylinderAirmass * getVe(rpm, airChargeLoad) / 100; + + return { + correctedAirmass, + airChargeLoad, // AFR/VE/ignition table Y axis + }; +} diff --git a/firmware/controllers/algo/airmass/maf_airmass.h b/firmware/controllers/algo/airmass/maf_airmass.h new file mode 100644 index 0000000000..ac557bd084 --- /dev/null +++ b/firmware/controllers/algo/airmass/maf_airmass.h @@ -0,0 +1,13 @@ +#pragma once + +#include "airmass.h" + +class MafAirmass final : public AirmassModelBase { +public: + MafAirmass(const ValueProvider3D& veTable) : AirmassModelBase(veTable) {} + + AirmassResult getAirmass(int rpm) override; + + // Compute airmass based on flow & engine speed + AirmassResult getAirmassImpl(float massAirFlow, int rpm) const; +}; diff --git a/firmware/controllers/algo/airmass/speed_density_airmass.cpp b/firmware/controllers/algo/airmass/speed_density_airmass.cpp new file mode 100644 index 0000000000..6bb8effbcc --- /dev/null +++ b/firmware/controllers/algo/airmass/speed_density_airmass.cpp @@ -0,0 +1,43 @@ +#include "global.h" +#include "engine.h" +#include "speed_density_airmass.h" +#include "map.h" +#include "perf_trace.h" + +EXTERN_ENGINE; + +AirmassResult SpeedDensityAirmass::getAirmass(int rpm) { + ScopePerf perf(PE::GetSpeedDensityFuel); + + /** + * most of the values are pre-calculated for performance reasons + */ + float tChargeK = ENGINE(engineState.sd.tChargeK); + if (cisnan(tChargeK)) { + warning(CUSTOM_ERR_TCHARGE_NOT_READY2, "tChargeK not ready"); // this would happen before we have CLT reading for example + return {}; + } + + float map = getMap(PASS_ENGINE_PARAMETER_SIGNATURE); + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(map), "NaN map", {}); + + engine->engineState.sd.manifoldAirPressureAccelerationAdjustment = engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); + + float adjustedMap = engine->engineState.sd.adjustedManifoldAirPressure = map + engine->engineState.sd.manifoldAirPressureAccelerationAdjustment; + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(adjustedMap), "NaN adjustedMap", {}); + + float airMass = getAirmassImpl(ENGINE(engineState.currentBaroCorrectedVE), adjustedMap, tChargeK PASS_ENGINE_PARAMETER_SUFFIX); + if (cisnan(airMass)) { + warning(CUSTOM_ERR_6685, "NaN airMass"); + return {}; + } +#if EFI_PRINTF_FUEL_DETAILS + printf("getSpeedDensityAirmass map=%.2f adjustedMap=%.2f airMass=%.2f\t\n", + map, adjustedMap, engine->engineState.sd.adjustedManifoldAirPressure); +#endif /*EFI_PRINTF_FUEL_DETAILS */ + + return { + airMass, + map, // AFR/VE table Y axis + }; +} diff --git a/firmware/controllers/algo/airmass/speed_density_airmass.h b/firmware/controllers/algo/airmass/speed_density_airmass.h new file mode 100644 index 0000000000..ab8ccad157 --- /dev/null +++ b/firmware/controllers/algo/airmass/speed_density_airmass.h @@ -0,0 +1,9 @@ +#pragma once + +#include "speed_density_base.h" + +class SpeedDensityAirmass : public SpeedDensityBase { +public: + SpeedDensityAirmass(const ValueProvider3D& veTable) : SpeedDensityBase(veTable) {} + AirmassResult getAirmass(int rpm) override; +}; diff --git a/firmware/controllers/algo/airmass/speed_density_base.h b/firmware/controllers/algo/airmass/speed_density_base.h index 29c2bad791..19f5136578 100644 --- a/firmware/controllers/algo/airmass/speed_density_base.h +++ b/firmware/controllers/algo/airmass/speed_density_base.h @@ -9,11 +9,14 @@ #pragma once -#include "engine.h" +#include "airmass.h" float idealGasLaw(float volume, float pressure, float temperature); -class SpeedDensityBase { +class SpeedDensityBase : public AirmassModelBase { +protected: + SpeedDensityBase(const ValueProvider3D& veTable) : AirmassModelBase(veTable) {} + public: static float getAirmassImpl(float ve, float manifoldPressure, float temperature DECLARE_ENGINE_PARAMETER_SUFFIX); }; diff --git a/firmware/controllers/algo/algo.mk b/firmware/controllers/algo/algo.mk index b4f6ed9fd6..e9ed7484b1 100644 --- a/firmware/controllers/algo/algo.mk +++ b/firmware/controllers/algo/algo.mk @@ -11,4 +11,8 @@ CONTROLLERS_ALGO_SRC_CPP = $(PROJECT_DIR)/controllers/algo/advance_map.cpp \ $(PROJECT_DIR)/controllers/algo/engine2.cpp \ $(PROJECT_DIR)/controllers/gauges/lcd_menu_tree.cpp \ $(PROJECT_DIR)/controllers/algo/event_registry.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/airmass.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/alphan_airmass.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/maf_airmass.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/speed_density_airmass.cpp \ $(PROJECT_DIR)/controllers/algo/airmass/speed_density_base.cpp \ diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 96d088be81..695c5509ac 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -731,6 +731,10 @@ case LM_REAL_MAF: return "LM_REAL_MAF"; case LM_SPEED_DENSITY: return "LM_SPEED_DENSITY"; +case LM_ALPHA_N_2: + return "LM_ALPHA_N_2"; +case LM_MOCK: + return "LM_MOCK"; } return NULL; } @@ -914,6 +918,10 @@ case GPPWM_Map: return "GPPWM_Map"; case GPPWM_Tps: return "GPPWM_Tps"; +case GPPWM_FuelLoad: + return "GPPWM_FuelLoad"; +case GPPWM_IgnLoad: + return "GPPWM_IgnLoad"; } return NULL; } diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index ffdea7208c..7f20c1656f 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -130,6 +130,14 @@ static void cylinderCleanupControl(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif } +#if HW_CHECK_MODE +static void assertCloseTo(const char * msg, float actual, float expected) { + if (actual < 0.9 * expected || actual > 1.1 * expected) { + firmwareError(OBD_PCM_Processor_Fault, "%s analog input validation failed %f vs %f", msg, actual, expected); + } +} +#endif // HW_CHECK_MODE + void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { ScopePerf perf(PE::EnginePeriodicSlowCallback); @@ -163,7 +171,14 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } #endif - slowCallBackWasInvoked = TRUE; + slowCallBackWasInvoked = true; + +#if HW_CHECK_MODE + assertCloseTo("clt", Sensor::get(SensorType::Clt).Value, 49.3); + assertCloseTo("iat", Sensor::get(SensorType::Iat).Value, 73.2); + assertCloseTo("aut1", Sensor::get(SensorType::AuxTemp1).Value, 13.8); + assertCloseTo("aut2", Sensor::get(SensorType::AuxTemp2).Value, 6.2); +#endif // HW_CHECK_MODE } diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 6ec879af4e..a98c07c254 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -31,6 +31,7 @@ #define FAST_CALLBACK_PERIOD_MS 5 class RpmCalculator; +class AirmassModelBase; #define MAF_DECODING_CACHE_SIZE 256 @@ -334,6 +335,8 @@ public: void knockLogic(float knockVolts DECLARE_ENGINE_PARAMETER_SUFFIX); void printKnockState(void); + AirmassModelBase* mockAirmassModel = nullptr; + private: /** * By the way: diff --git a/firmware/controllers/algo/event_registry.cpp b/firmware/controllers/algo/event_registry.cpp index 6a4727f184..7746fb9ca0 100644 --- a/firmware/controllers/algo/event_registry.cpp +++ b/firmware/controllers/algo/event_registry.cpp @@ -25,8 +25,6 @@ #include "engine_math.h" InjectionEvent::InjectionEvent() { - isSimultanious = false; - ownIndex = 0; memset(outputs, 0, sizeof(outputs)); } diff --git a/firmware/controllers/algo/event_registry.h b/firmware/controllers/algo/event_registry.h index 0561933748..b483208fc1 100644 --- a/firmware/controllers/algo/event_registry.h +++ b/firmware/controllers/algo/event_registry.h @@ -22,13 +22,17 @@ class Engine; class InjectionEvent { public: InjectionEvent(); + + // Call this every decoded trigger tooth. It will schedule any relevant events for this injector. + void onTriggerTooth(size_t toothIndex, int rpm, efitick_t nowNt); + /** * This is a performance optimization for IM_SIMULTANEOUS fuel strategy. * It's more efficient to handle all injectors together if that's the case */ - bool isSimultanious; + bool isSimultanious = false; InjectorOutputPin *outputs[MAX_WIRES_COUNT]; - int ownIndex; + int ownIndex = 0; DECLARE_ENGINE_PTR; event_trigger_position_s injectionStart; @@ -47,13 +51,16 @@ public: WallFuel wallFuel; }; - /** * This class knows about when to inject fuel */ class FuelSchedule { public: FuelSchedule(); + + // Call this every trigger tooth. It will schedule all required injector events. + void onTriggerTooth(size_t toothIndex, int rpm, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX); + /** * this method schedules all fuel events for an engine cycle */ diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 02d31504b5..7d60e77ea0 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -23,6 +23,9 @@ #include "global.h" #include "airmass.h" +#include "alphan_airmass.h" +#include "maf_airmass.h" +#include "speed_density_airmass.h" #include "fuel_math.h" #include "interpolation.h" #include "engine_configuration.h" @@ -153,41 +156,6 @@ floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX) { /* DISPLAY_ENDIF */ -/** - * Function block now works to create a standardised load from the cylinder filling as well as tune fuel via VE table. - * @return total duration of fuel injection per engine cycle, in milliseconds - */ -AirmassResult getRealMafAirmass(float airSpeed, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { - // If the engine is stopped, MAF is meaningless - if (rpm == 0) { - return {}; - } - - // kg/hr -> g/s - float gramPerSecond = airSpeed * 1000 / 3600; - - // 1/min -> 1/s - float revsPerSecond = rpm / 60.0f; - float airPerRevolution = gramPerSecond / revsPerSecond; - - // Now we have to divide among cylinders - on a 4 stroke, half of the cylinders happen every rev - // This math is floating point to work properly on engines with odd cyl count - float halfCylCount = CONFIG(specs.cylindersCount) / 2.0f; - - float cylinderAirmass = airPerRevolution / halfCylCount; - - //Create % load for fuel table using relative naturally aspiratedcylinder filling - float airChargeLoad = 100 * cylinderAirmass / ENGINE(standardAirCharge); - - //Correct air mass by VE table - float correctedAirmass = cylinderAirmass * veMap.getValue(rpm, airChargeLoad) / 100; - - return { - correctedAirmass, - airChargeLoad, // AFR/VE table Y axis - }; -} - constexpr float convertToGramsPerSecond(float ccPerMinute) { float ccPerSecond = ccPerMinute / 60; return ccPerSecond * 0.72f; // 0.72g/cc fuel density @@ -202,16 +170,19 @@ float getInjectionDurationForAirmass(float airMass, float afr DECLARE_ENGINE_PAR return airMass / (afr * gPerSec); } -AirmassResult getAirmass(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { +static SpeedDensityAirmass sdAirmass(veMap); +static MafAirmass mafAirmass(veMap); +static AlphaNAirmass alphaNAirmass(veMap); + +AirmassModelBase* getAirmassModel(DECLARE_ENGINE_PARAMETER_SIGNATURE) { switch (CONFIG(fuelAlgorithm)) { - case LM_SPEED_DENSITY: - return getSpeedDensityAirmass(PASS_ENGINE_PARAMETER_SIGNATURE); - case LM_REAL_MAF: { - float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); - return getRealMafAirmass(maf, rpm PASS_ENGINE_PARAMETER_SUFFIX); - } default: - firmwareError(CUSTOM_ERR_ASSERT, "Fuel mode %d is not airmass mode", CONFIG(fuelAlgorithm)); - return {}; + case LM_SPEED_DENSITY: return &sdAirmass; + case LM_REAL_MAF: return &mafAirmass; + case LM_ALPHA_N_2: return &alphaNAirmass; +#if EFI_UNIT_TEST + case LM_MOCK: return engine->mockAirmassModel; +#endif + default: return nullptr; } } @@ -228,15 +199,19 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { floatms_t baseFuel; - if ((CONFIG(fuelAlgorithm) == LM_SPEED_DENSITY) || (engineConfiguration->fuelAlgorithm == LM_REAL_MAF)) { + if ((CONFIG(fuelAlgorithm) == LM_SPEED_DENSITY) || + (engineConfiguration->fuelAlgorithm == LM_REAL_MAF) || + (engineConfiguration->fuelAlgorithm == LM_ALPHA_N_2) || + (engineConfiguration->fuelAlgorithm == LM_MOCK)) { // airmass modes - get airmass first, then convert to fuel - auto airmass = getAirmass(rpm PASS_ENGINE_PARAMETER_SUFFIX); + auto model = getAirmassModel(PASS_ENGINE_PARAMETER_SIGNATURE); + efiAssert(CUSTOM_ERR_ASSERT, model != nullptr, "Invalid airmass mode", 0.0f); + + auto airmass = model->getAirmass(rpm); // The airmass mode will tell us how to look up AFR - use the provided Y axis value float targetAfr = afrMap.getValue(rpm, airmass.EngineLoadPercent); - // TODO: surface airmass.EngineLoadPercent to tunerstudio for proper display - // Plop some state for others to read ENGINE(engineState.targetAFR) = targetAfr; ENGINE(engineState.sd.airMassInOneCylinder) = airmass.CylinderAirmass; @@ -384,6 +359,9 @@ floatms_t getInjectorLag(float vBatt DECLARE_ENGINE_PARAMETER_SUFFIX) { * is to prepare the fuel map data structure for 3d interpolation */ void initFuelMap(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + INJECT_ENGINE_REFERENCE(&sdAirmass); + INJECT_ENGINE_REFERENCE(&mafAirmass); + fuelMap.init(config->fuelTable, config->fuelLoadBins, config->fuelRpmBins); #if (IGN_LOAD_COUNT == FUEL_LOAD_COUNT) && (IGN_RPM_COUNT == FUEL_RPM_COUNT) fuelPhaseMap.init(config->injectionPhase, config->injPhaseLoadBins, config->injPhaseRpmBins); diff --git a/firmware/controllers/algo/fuel_math.h b/firmware/controllers/algo/fuel_math.h index d0b52aebff..28a88787a5 100644 --- a/firmware/controllers/algo/fuel_math.h +++ b/firmware/controllers/algo/fuel_math.h @@ -22,8 +22,6 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); */ floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX); -AirmassResult getRealMafAirmass(float airMass, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); - floatms_t getBaseTableFuel(int rpm, float engineLoad); float getBaroCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); int getNumberOfInjections(injection_mode_e mode DECLARE_ENGINE_PARAMETER_SUFFIX); diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 37053e06e1..01ef99bdca 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -439,6 +439,12 @@ typedef enum { */ LM_REAL_MAF = 4, + // todo: rename after LM_ALPHA_N is removed + LM_ALPHA_N_2 = 5, + + // This mode is for unit testing only, so that tests don't have to rely on a particular real airmass mode + LM_MOCK = 100, + Force_4_bytes_size_engine_load_mode = ENUM_32_BITS, } engine_load_mode_e; @@ -948,6 +954,8 @@ typedef enum __attribute__ ((__packed__)) { GPPWM_Map = 1, GPPWM_Clt = 2, GPPWM_Iat = 3, + GPPWM_FuelLoad = 4, + GPPWM_IgnLoad = 5, } gppwm_channel_e; typedef enum __attribute__ ((__packed__)) { diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index e82d195225..18714e6408 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -40,6 +40,7 @@ #include "electronic_throttle.h" #include "cj125.h" #include "malfunction_central.h" +#include "tunerstudio_outputs.h" #if EFI_PROD_CODE #include "rusefi.h" @@ -271,6 +272,9 @@ static void handleCommandX14(uint16_t index) { return; case 0x10: engine->etbAutoTune = false; +#if EFI_TUNER_STUDIO + tsOutputChannels.calibrationMode = TsCalMode::None; +#endif // EFI_TUNER_STUDIO return; #endif case 0xF: diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index 252ac28284..ec623102ff 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -123,7 +123,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { obdSendValue(1, pid, 2, (2<<8)|(0)); // 2 = "Closed loop, using oxygen sensor feedback to determine fuel mix" break; case PID_ENGINE_LOAD: - obdSendValue(1, pid, 1, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f); + obdSendValue(1, pid, 1, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f); break; case PID_COOLANT_TEMP: obdSendValue(1, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f); diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index 44ba571980..4fb3a605ee 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -34,6 +34,7 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/engine_cycle/spark_logic.cpp \ $(CONTROLLERS_DIR)/engine_cycle/main_trigger_callback.cpp \ $(CONTROLLERS_DIR)/engine_cycle/aux_valves.cpp \ + $(CONTROLLERS_DIR)/engine_cycle/fuel_schedule.cpp \ $(CONTROLLERS_DIR)/flash_main.cpp \ $(CONTROLLERS_DIR)/bench_test.cpp \ $(CONTROLLERS_DIR)/can/obd2.cpp \ diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 1a0a33e8cd..1335e3ad3b 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200723 +#define VCS_DATE 20200729 diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 3d60580522..4a6416dcf2 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -324,6 +324,8 @@ static void printAnalogInfo(void) { printAnalogChannelInfo("pPS", engineConfiguration->throttlePedalPositionAdcChannel); printAnalogChannelInfo("CLT", engineConfiguration->clt.adcChannel); printAnalogChannelInfo("IAT", engineConfiguration->iat.adcChannel); + printAnalogChannelInfo("AuxT1", engineConfiguration->auxTempSensor1.adcChannel); + printAnalogChannelInfo("AuxT2", engineConfiguration->auxTempSensor2.adcChannel); printAnalogChannelInfo("MAF", engineConfiguration->mafAdcChannel); for (int i = 0; i < FSIO_ANALOG_INPUT_COUNT ; i++) { adc_channel_e ch = engineConfiguration->fsioAdc[i]; diff --git a/firmware/controllers/engine_cycle/fuel_schedule.cpp b/firmware/controllers/engine_cycle/fuel_schedule.cpp new file mode 100644 index 0000000000..335f356d91 --- /dev/null +++ b/firmware/controllers/engine_cycle/fuel_schedule.cpp @@ -0,0 +1,163 @@ +/** + * @file fuel_schedule.cpp + * + * Handles injection scheduling + */ + +#include "global.h" +#include "engine.h" +#include "engine_math.h" +#include "event_registry.h" + +EXTERN_ENGINE; + +#if EFI_ENGINE_CONTROL + +FuelSchedule::FuelSchedule() { + clear(); + for (int cylinderIndex = 0; cylinderIndex < MAX_INJECTION_OUTPUT_COUNT; cylinderIndex++) { + InjectionEvent *ev = &elements[cylinderIndex]; + ev->ownIndex = cylinderIndex; + } +} + +void FuelSchedule::clear() { + isReady = false; +} + +void FuelSchedule::resetOverlapping() { + for (size_t i = 0; i < efi::size(enginePins.injectors); i++) { + enginePins.injectors[i].reset(); + } +} + +/** + * @returns false in case of error, true if success + */ +bool FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_SUFFIX) { + efiAssert(CUSTOM_ERR_ASSERT, engine!=NULL, "engine is NULL", false); + + floatus_t oneDegreeUs = ENGINE(rpmCalculator.oneDegreeUs); // local copy + if (cisnan(oneDegreeUs)) { + // in order to have fuel schedule we need to have current RPM + // wonder if this line slows engine startup? + return false; + } + + /** + * injection phase is scheduled by injection end, so we need to step the angle back + * for the duration of the injection + * + * todo: since this method is not invoked within trigger event handler and + * engineState.injectionOffset is calculated from the same utility timer should we more that logic here? + */ + floatms_t fuelMs = ENGINE(injectionDuration); + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(fuelMs), "NaN fuelMs", false); + angle_t injectionDuration = MS2US(fuelMs) / oneDegreeUs; + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(injectionDuration), "NaN injectionDuration", false); + assertAngleRange(injectionDuration, "injectionDuration_r", CUSTOM_INJ_DURATION); + floatus_t injectionOffset = ENGINE(engineState.injectionOffset); + if (cisnan(injectionOffset)) { + // injection offset map not ready - we are not ready to schedule fuel events + return false; + } + angle_t baseAngle = injectionOffset - injectionDuration; + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(baseAngle), "NaN baseAngle", false); + assertAngleRange(baseAngle, "baseAngle_r", CUSTOM_ERR_6554); + + injection_mode_e mode = engine->getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE); + + int injectorIndex; + if (mode == IM_SIMULTANEOUS || mode == IM_SINGLE_POINT) { + // These modes only have one injector + injectorIndex = 0; + } else if (mode == IM_SEQUENTIAL || (mode == IM_BATCH && CONFIG(twoWireBatchInjection))) { + // Map order index -> cylinder index (firing order) + injectorIndex = getCylinderId(i PASS_ENGINE_PARAMETER_SUFFIX) - 1; + } else if (mode == IM_BATCH) { + // Loop over the first half of the firing order twice + injectorIndex = i % (engineConfiguration->specs.cylindersCount / 2); + } else { + firmwareError(CUSTOM_OBD_UNEXPECTED_INJECTION_MODE, "Unexpected injection mode %d", mode); + injectorIndex = 0; + } + + assertAngleRange(baseAngle, "addFbaseAngle", CUSTOM_ADD_BASE); + + int cylindersCount = CONFIG(specs.cylindersCount); + if (cylindersCount < 1) { + // May 2020 this somehow still happens with functional tests, maybe race condition? + warning(CUSTOM_OBD_ZERO_CYLINDER_COUNT, "Invalid cylinder count: %d", cylindersCount); + return false; + } + + float angle = baseAngle + + i * ENGINE(engineCycle) / cylindersCount; + + InjectorOutputPin *secondOutput; + if (mode == IM_BATCH && CONFIG(twoWireBatchInjection)) { + /** + * also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires + */ + // Compute the position of this cylinder's twin in the firing order + // Each injector gets fired as a primary (the same as sequential), but also + // fires the injector 360 degrees later in the firing order. + int secondOrder = (i + (CONFIG(specs.cylindersCount) / 2)) % CONFIG(specs.cylindersCount); + int secondIndex = getCylinderId(secondOrder PASS_ENGINE_PARAMETER_SUFFIX) - 1; + secondOutput = &enginePins.injectors[secondIndex]; + } else { + secondOutput = nullptr; + } + + InjectorOutputPin *output = &enginePins.injectors[injectorIndex]; + bool isSimultanious = mode == IM_SIMULTANEOUS; + + if (!isSimultanious && !output->isInitialized()) { + // todo: extract method for this index math + warning(CUSTOM_OBD_INJECTION_NO_PIN_ASSIGNED, "no_pin_inj #%s", output->name); + } + + InjectionEvent *ev = &elements[i]; + ev->ownIndex = i; + INJECT_ENGINE_REFERENCE(ev); + fixAngle(angle, "addFuel#1", CUSTOM_ERR_6554); + + ev->outputs[0] = output; + ev->outputs[1] = secondOutput; + + ev->isSimultanious = isSimultanious; + + if (TRIGGER_WAVEFORM(getSize()) < 1) { + warning(CUSTOM_ERR_NOT_INITIALIZED_TRIGGER, "uninitialized TriggerWaveform"); + return false; + } + + efiAssert(CUSTOM_ERR_ASSERT, !cisnan(angle), "findAngle#3", false); + assertAngleRange(angle, "findAngle#a33", CUSTOM_ERR_6544); + ev->injectionStart.setAngle(angle PASS_ENGINE_PARAMETER_SUFFIX); +#if EFI_UNIT_TEST + printf("registerInjectionEvent angle=%.2f trgIndex=%d inj %d\r\n", angle, ev->injectionStart.triggerEventIndex, injectorIndex); +#endif + return true; +} + +void FuelSchedule::addFuelEvents(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + clear(); + + for (int cylinderIndex = 0; cylinderIndex < CONFIG(specs.cylindersCount); cylinderIndex++) { + InjectionEvent *ev = &elements[cylinderIndex]; + ev->ownIndex = cylinderIndex; // todo: is this assignment needed here? we now initialize in constructor + bool result = addFuelEventsForCylinder(cylinderIndex PASS_ENGINE_PARAMETER_SUFFIX); + if (!result) + return; + } + isReady = true; +} + +void FuelSchedule::onTriggerTooth(size_t toothIndex, int rpm, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { + for (int i = 0; i < CONFIG(specs.cylindersCount); i++) { + elements[i].onTriggerTooth(toothIndex, rpm, nowNt); + } +} + +#endif diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index ba97235b4a..d288983017 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -187,9 +187,13 @@ void turnInjectionPinLow(InjectionEvent *event) { ENGINE(injectionEvents.addFuelEventsForCylinder(event->ownIndex PASS_ENGINE_PARAMETER_SUFFIX)); } -// todo: rename to 'scheduleInjectorOpenAndClose'? -void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event, - int rpm, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { +void InjectionEvent::onTriggerTooth(size_t trgEventIndex, int rpm, efitick_t nowNt) { + uint32_t eventIndex = injectionStart.triggerEventIndex; +// right after trigger change we are still using old & invalid fuel schedule. good news is we do not change trigger on the fly in real life +// efiAssertVoid(CUSTOM_ERR_ASSERT_VOID, eventIndex < ENGINE(triggerShape.getLength()), "handleFuel/event sch index"); + if (eventIndex != trgEventIndex) { + return; + } /** * todo: this is a bit tricky with batched injection. is it? Does the same @@ -197,11 +201,11 @@ void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event, * x2 or /2? */ - const floatms_t injectionDuration = event->wallFuel.adjust(ENGINE(injectionDuration) PASS_ENGINE_PARAMETER_SUFFIX); + const floatms_t injectionDuration = wallFuel.adjust(ENGINE(injectionDuration) PASS_ENGINE_PARAMETER_SUFFIX); #if EFI_PRINTF_FUEL_DETAILS if (printFuelDebug) { printf("fuel index=%d injectionDuration=%.2fms adjusted=%.2fms\n", - injEventIndex, + eventIndex, ENGINE(injectionDuration), injectionDuration); } @@ -245,7 +249,7 @@ void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event, // we are ignoring low RPM in order not to handle "engine was stopped to engine now running" transition if (rpm > 2 * engineConfiguration->cranking.rpm) { - const char *outputName = event->outputs[0]->name; + const char *outputName = outputs[0]->name; if (prevOutputName == outputName && engineConfiguration->injectionMode != IM_SIMULTANEOUS && engineConfiguration->injectionMode != IM_SINGLE_POINT) { @@ -256,48 +260,48 @@ void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event, #if EFI_PRINTF_FUEL_DETAILS if (printFuelDebug) { - InjectorOutputPin *output = event->outputs[0]; + InjectorOutputPin *output = outputs[0]; printf("handleFuelInjectionEvent fuelout %s injection_duration %dus engineCycleDuration=%.1fms\t\n", output->name, (int)durationUs, (int)MS2US(getCrankshaftRevolutionTimeMs(GET_RPM_VALUE)) / 1000.0); } #endif /*EFI_PRINTF_FUEL_DETAILS */ - if (event->isScheduled) { + if (isScheduled) { #if EFI_PRINTF_FUEL_DETAILS if (printFuelDebug) { - InjectorOutputPin *output = event->outputs[0]; + InjectorOutputPin *output = outputs[0]; printf("handleFuelInjectionEvent still used %s now=%.1fms\r\n", output->name, (int)getTimeNowUs() / 1000.0); } #endif /*EFI_PRINTF_FUEL_DETAILS */ return; // this InjectionEvent is still needed for an extremely long injection scheduled previously } - event->isScheduled = true; + isScheduled = true; action_s startAction, endAction; // We use different callbacks based on whether we're running sequential mode or not - everything else is the same - if (event->isSimultanious) { + if (isSimultanious) { startAction = { &startSimultaniousInjection, engine }; - endAction = { &endSimultaniousInjection, event }; + endAction = { &endSimultaniousInjection, this }; } else { // sequential or batch - startAction = { &turnInjectionPinHigh, event }; - endAction = { &turnInjectionPinLow, event }; + startAction = { &turnInjectionPinHigh, this }; + endAction = { &turnInjectionPinLow, this }; } - efitick_t startTime = scheduleByAngle(&event->signalTimerUp, nowNt, event->injectionStart.angleOffsetFromTriggerEvent, startAction PASS_ENGINE_PARAMETER_SUFFIX); + efitick_t startTime = scheduleByAngle(&signalTimerUp, nowNt, injectionStart.angleOffsetFromTriggerEvent, startAction PASS_ENGINE_PARAMETER_SUFFIX); efitick_t turnOffTime = startTime + US2NT((int)durationUs); - engine->executor.scheduleByTimestampNt(&event->endOfInjectionEvent, turnOffTime, endAction); + engine->executor.scheduleByTimestampNt(&endOfInjectionEvent, turnOffTime, endAction); #if EFI_UNIT_TEST - printf("scheduling injection angle=%.2f/delay=%.2f injectionDuration=%.2f\r\n", event->injectionStart.angleOffsetFromTriggerEvent, NT2US(startTime - nowNt), injectionDuration); + printf("scheduling injection angle=%.2f/delay=%.2f injectionDuration=%.2f\r\n", injectionStart.angleOffsetFromTriggerEvent, NT2US(startTime - nowNt), injectionDuration); #endif #if EFI_DEFAILED_LOGGING - scheduleMsg(logger, "handleFuel pin=%s eventIndex %d duration=%.2fms %d", event->outputs[0]->name, + scheduleMsg(logger, "handleFuel pin=%s eventIndex %d duration=%.2fms %d", outputs[0]->name, injEventIndex, injectionDuration, getRevolutionCounter()); - scheduleMsg(logger, "handleFuel pin=%s delay=%.2f %d", event->outputs[0]->name, NT2US(startTime - nowNt), + scheduleMsg(logger, "handleFuel pin=%s delay=%.2f %d", outputs[0]->name, NT2US(startTime - nowNt), getRevolutionCounter()); #endif /* EFI_DEFAILED_LOGGING */ } @@ -322,7 +326,7 @@ static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIn } /** - * Ignition events are defined by addFuelEvents() according to selected + * Injection events are defined by addFuelEvents() according to selected * fueling strategy */ FuelSchedule *fs = &ENGINE(injectionEvents); @@ -342,16 +346,7 @@ static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIn ENGINE(engineLoadAccelEnrichment.onEngineCycle(PASS_ENGINE_PARAMETER_SIGNATURE)); } - for (int injEventIndex = 0; injEventIndex < CONFIG(specs.cylindersCount); injEventIndex++) { - InjectionEvent *event = &fs->elements[injEventIndex]; - uint32_t eventIndex = event->injectionStart.triggerEventIndex; -// right after trigger change we are still using old & invalid fuel schedule. good news is we do not change trigger on the fly in real life -// efiAssertVoid(CUSTOM_ERR_ASSERT_VOID, eventIndex < ENGINE(triggerShape.getLength()), "handleFuel/event sch index"); - if (eventIndex != trgEventIndex) { - continue; - } - handleFuelInjectionEvent(injEventIndex, event, rpm, nowNt PASS_ENGINE_PARAMETER_SUFFIX); - } + fs->onTriggerTooth(trgEventIndex, rpm, nowNt PASS_ENGINE_PARAMETER_SUFFIX); } #if EFI_PROD_CODE @@ -473,6 +468,8 @@ static bool isPrimeInjectionPulseSkipped(DECLARE_ENGINE_PARAMETER_SIGNATURE) { * See testStartOfCrankingPrimingPulse() */ void startPrimeInjectionPulse(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + INJECT_ENGINE_REFERENCE(&primeInjEvent); + // First, we need a protection against 'fake' ignition switch on and off (i.e. no engine started), to avoid repeated prime pulses. // So we check and update the ignition switch counter in non-volatile backup-RAM #if EFI_PROD_CODE @@ -490,10 +487,6 @@ void startPrimeInjectionPulse(DECLARE_ENGINE_PARAMETER_SIGNATURE) { ignSwitchCounter = -1; // start prime injection if this is a 'fresh start' if (ignSwitchCounter == 0) { - // fill-in the prime event struct -#if EFI_UNIT_TEST - primeInjEvent.engine = engine; -#endif /* EFI_UNIT_TEST */ primeInjEvent.ownIndex = 0; primeInjEvent.isSimultanious = true; @@ -535,7 +528,7 @@ void updatePrimeInjectionPulseState(DECLARE_ENGINE_PARAMETER_SIGNATURE) { static void showMainInfo(Engine *engine) { #if EFI_PROD_CODE int rpm = GET_RPM(); - float el = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); + float el = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); scheduleMsg(logger, "rpm %d engine_load %.2f", rpm, el); scheduleMsg(logger, "fuel %.2fms timing %.2f", getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX), engine->engineState.timingAdvance); #endif /* EFI_PROD_CODE */ diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 70c3e63e8d..6f3d882cea 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -1460,8 +1460,8 @@ struct engine_configuration_s { offset 744 bit 26 */ bool is_enabled_spi_4 : 1; /** - * Disable the electronic throttle motor for testing. - * This mode is for testing ETB position sensors, etc without actually driving the throttle. + * Disable the electronic throttle motor and DC idle motor for testing. + * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. offset 744 bit 27 */ bool pauseEtbControl : 1; /** @@ -1759,8 +1759,11 @@ struct engine_configuration_s { offset 976 bit 10 */ bool stftIgnoreErrorMagnitude : 1; /** + * Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve. + * Set the primary TPS to the cable-operated throttle's sensor + * Set the secondary TPS to the mini ETB's position sensor(s). offset 976 bit 11 */ - bool unusedBit_251_11 : 1; + bool dcMotorIdleValve : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -2140,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3530,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 6f7e5a9f56..454ba06590 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 135b7662b1..06a179ea14 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index ef9557d3a5..bc2202ffd5 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 4d2821901f..92a23ce5f5 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 778699efa7..acd035bf2c 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -276,6 +276,7 @@ #define cutSparkOnHardLimit_offset 1464 #define cylinderBore_offset 408 #define cylindersCount_offset 400 +#define dcMotorIdleValve_offset 976 #define debug_mode_e_enum "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44" #define debugMapAveraging_offset 807 #define debugMode_offset 2092 @@ -304,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -658,7 +659,7 @@ #define gppwm4_pwmFrequency_offset 4410 #define gppwm4_rpmBins_offset 4424 #define gppwm4_table_offset 4432 -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" #define gppwm_channel_size 88 #define GPPWM_CHANNELS 4 #define GPPWM_LOAD_COUNT 8 @@ -1074,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 692540479 +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1542883429 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.22.all.692540479" +#define TS_SIGNATURE "rusEFI 2020.07.28.all.1542883429" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1378,7 +1379,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_11_offset 976 #define unusedBit_251_12_offset 976 #define unusedBit_251_13_offset 976 #define unusedBit_251_14_offset 976 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 65f52e49ce..78bbf70a7f 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 692540479 -#define TS_SIGNATURE "rusEFI 2020.07.22.all.692540479" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1542883429 +#define TS_SIGNATURE "rusEFI 2020.07.28.all.1542883429" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index f3dea3c05d..5b7f882663 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 4156569820 -#define TS_SIGNATURE "rusEFI 2020.07.22.frankenso_na6.4156569820" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2238833798 +#define TS_SIGNATURE "rusEFI 2020.07.28.frankenso_na6.2238833798" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 02414ee618..2d4d46d448 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3833170085 -#define TS_SIGNATURE "rusEFI 2020.07.22.kin.3833170085" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2529711359 +#define TS_SIGNATURE "rusEFI 2020.07.28.kin.2529711359" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index ee04715c9a..fee7bb8022 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 1622770353 -#define TS_SIGNATURE "rusEFI 2020.07.22.mre_f4.1622770353" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 302538475 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f4.302538475" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 7e6cf57e7c..a80875d065 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 1622770353 -#define TS_SIGNATURE "rusEFI 2020.07.22.mre_f7.1622770353" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 302538475 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f7.302538475" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 951d6e1ab6..5b72e1f00e 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3696987323 -#define TS_SIGNATURE "rusEFI 2020.07.22.prometheus_405.3696987323" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2934591713 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_405.2934591713" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 93f1cdbacd..90548ab2f3 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3696987323 -#define TS_SIGNATURE "rusEFI 2020.07.22.prometheus_469.3696987323" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2934591713 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_469.2934591713" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index fef0319235..cf3b47dae4 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 2765497840 -#define TS_SIGNATURE "rusEFI 2020.07.22.proteus_f4.2765497840" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 3597138346 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f4.3597138346" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index a9279fabbd..00e86821f0 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 2765497840 -#define TS_SIGNATURE "rusEFI 2020.07.22.proteus_f7.2765497840" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 3597138346 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f7.3597138346" diff --git a/firmware/controllers/math/closed_loop_fuel.cpp b/firmware/controllers/math/closed_loop_fuel.cpp index 6abfa49928..bdb552e09c 100644 --- a/firmware/controllers/math/closed_loop_fuel.cpp +++ b/firmware/controllers/math/closed_loop_fuel.cpp @@ -84,7 +84,7 @@ float fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return 1.0f; } - size_t binIdx = computeStftBin(GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft)); + size_t binIdx = computeStftBin(GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft)); #if EFI_TUNER_STUDIO if (engineConfiguration->debugMode == DBG_FUEL_PID_CORRECTION) { diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index f6774fcec9..7bb4011803 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -68,6 +68,7 @@ float getEngineLoadT(DECLARE_ENGINE_PARAMETER_SIGNATURE) { case LM_SPEED_DENSITY: return getMap(PASS_ENGINE_PARAMETER_SIGNATURE); case LM_ALPHA_N: + case LM_ALPHA_N_2: return Sensor::get(SensorType::Tps1).value_or(0); case LM_REAL_MAF: return getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -96,151 +97,6 @@ void setSingleCoilDwell(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->sparkDwellValues[7] = 0; } -#if EFI_ENGINE_CONTROL - -FuelSchedule::FuelSchedule() { - clear(); - for (int cylinderIndex = 0; cylinderIndex < MAX_INJECTION_OUTPUT_COUNT; cylinderIndex++) { - InjectionEvent *ev = &elements[cylinderIndex]; - ev->ownIndex = cylinderIndex; - } -} - -void FuelSchedule::clear() { - isReady = false; -} - -void FuelSchedule::resetOverlapping() { - for (size_t i = 0; i < efi::size(enginePins.injectors); i++) { - enginePins.injectors[i].reset(); - } -} - -/** - * @returns false in case of error, true if success - */ -bool FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_SUFFIX) { - efiAssert(CUSTOM_ERR_ASSERT, engine!=NULL, "engine is NULL", false); - - floatus_t oneDegreeUs = ENGINE(rpmCalculator.oneDegreeUs); // local copy - if (cisnan(oneDegreeUs)) { - // in order to have fuel schedule we need to have current RPM - // wonder if this line slows engine startup? - return false; - } - - /** - * injection phase is scheduled by injection end, so we need to step the angle back - * for the duration of the injection - * - * todo: since this method is not invoked within trigger event handler and - * engineState.injectionOffset is calculated from the same utility timer should we more that logic here? - */ - floatms_t fuelMs = ENGINE(injectionDuration); - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(fuelMs), "NaN fuelMs", false); - angle_t injectionDuration = MS2US(fuelMs) / oneDegreeUs; - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(injectionDuration), "NaN injectionDuration", false); - assertAngleRange(injectionDuration, "injectionDuration_r", CUSTOM_INJ_DURATION); - floatus_t injectionOffset = ENGINE(engineState.injectionOffset); - if (cisnan(injectionOffset)) { - // injection offset map not ready - we are not ready to schedule fuel events - return false; - } - angle_t baseAngle = injectionOffset - injectionDuration; - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(baseAngle), "NaN baseAngle", false); - assertAngleRange(baseAngle, "baseAngle_r", CUSTOM_ERR_6554); - - injection_mode_e mode = engine->getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE); - - int injectorIndex; - if (mode == IM_SIMULTANEOUS || mode == IM_SINGLE_POINT) { - // These modes only have one injector - injectorIndex = 0; - } else if (mode == IM_SEQUENTIAL || (mode == IM_BATCH && CONFIG(twoWireBatchInjection))) { - // Map order index -> cylinder index (firing order) - injectorIndex = getCylinderId(i PASS_ENGINE_PARAMETER_SUFFIX) - 1; - } else if (mode == IM_BATCH) { - // Loop over the first half of the firing order twice - injectorIndex = i % (engineConfiguration->specs.cylindersCount / 2); - } else { - firmwareError(CUSTOM_OBD_UNEXPECTED_INJECTION_MODE, "Unexpected injection mode %d", mode); - injectorIndex = 0; - } - - assertAngleRange(baseAngle, "addFbaseAngle", CUSTOM_ADD_BASE); - - int cylindersCount = CONFIG(specs.cylindersCount); - if (cylindersCount < 1) { - // May 2020 this somehow still happens with functional tests, maybe race condition? - warning(CUSTOM_OBD_ZERO_CYLINDER_COUNT, "Invalid cylinder count: %d", cylindersCount); - return false; - } - - float angle = baseAngle - + i * ENGINE(engineCycle) / cylindersCount; - - InjectorOutputPin *secondOutput; - if (mode == IM_BATCH && CONFIG(twoWireBatchInjection)) { - /** - * also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires - */ - // Compute the position of this cylinder's twin in the firing order - // Each injector gets fired as a primary (the same as sequential), but also - // fires the injector 360 degrees later in the firing order. - int secondOrder = (i + (CONFIG(specs.cylindersCount) / 2)) % CONFIG(specs.cylindersCount); - int secondIndex = getCylinderId(secondOrder PASS_ENGINE_PARAMETER_SUFFIX) - 1; - secondOutput = &enginePins.injectors[secondIndex]; - } else { - secondOutput = nullptr; - } - - InjectorOutputPin *output = &enginePins.injectors[injectorIndex]; - bool isSimultanious = mode == IM_SIMULTANEOUS; - - if (!isSimultanious && !output->isInitialized()) { - // todo: extract method for this index math - warning(CUSTOM_OBD_INJECTION_NO_PIN_ASSIGNED, "no_pin_inj #%s", output->name); - } - - InjectionEvent *ev = &elements[i]; - ev->ownIndex = i; - INJECT_ENGINE_REFERENCE(ev); - fixAngle(angle, "addFuel#1", CUSTOM_ERR_6554); - - ev->outputs[0] = output; - ev->outputs[1] = secondOutput; - - ev->isSimultanious = isSimultanious; - - if (TRIGGER_WAVEFORM(getSize()) < 1) { - warning(CUSTOM_ERR_NOT_INITIALIZED_TRIGGER, "uninitialized TriggerWaveform"); - return false; - } - - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(angle), "findAngle#3", false); - assertAngleRange(angle, "findAngle#a33", CUSTOM_ERR_6544); - ev->injectionStart.setAngle(angle PASS_ENGINE_PARAMETER_SUFFIX); -#if EFI_UNIT_TEST - printf("registerInjectionEvent angle=%.2f trgIndex=%d inj %d\r\n", angle, ev->injectionStart.triggerEventIndex, injectorIndex); -#endif - return true; -} - -void FuelSchedule::addFuelEvents(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - clear(); - - for (int cylinderIndex = 0; cylinderIndex < CONFIG(specs.cylindersCount); cylinderIndex++) { - InjectionEvent *ev = &elements[cylinderIndex]; - ev->ownIndex = cylinderIndex; // todo: is this assignment needed here? we now initialize in constructor - bool result = addFuelEventsForCylinder(cylinderIndex PASS_ENGINE_PARAMETER_SUFFIX); - if (!result) - return; - } - isReady = true; -} - -#endif - static floatms_t getCrankingSparkDwell(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (engineConfiguration->useConstantDwellDuringCranking) { return engineConfiguration->ignitionDwellForCrankingMs; diff --git a/firmware/controllers/math/speed_density.cpp b/firmware/controllers/math/speed_density.cpp index fb5847f461..0a29656399 100644 --- a/firmware/controllers/math/speed_density.cpp +++ b/firmware/controllers/math/speed_density.cpp @@ -112,42 +112,6 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX) { return Tcharge; } -AirmassResult getSpeedDensityAirmass(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - ScopePerf perf(PE::GetSpeedDensityFuel); - - /** - * most of the values are pre-calculated for performance reasons - */ - float tChargeK = ENGINE(engineState.sd.tChargeK); - if (cisnan(tChargeK)) { - warning(CUSTOM_ERR_TCHARGE_NOT_READY2, "tChargeK not ready"); // this would happen before we have CLT reading for example - return {}; - } - - float map = getMap(PASS_ENGINE_PARAMETER_SIGNATURE); - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(map), "NaN map", {}); - - engine->engineState.sd.manifoldAirPressureAccelerationAdjustment = engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); - - float adjustedMap = engine->engineState.sd.adjustedManifoldAirPressure = map + engine->engineState.sd.manifoldAirPressureAccelerationAdjustment; - efiAssert(CUSTOM_ERR_ASSERT, !cisnan(adjustedMap), "NaN adjustedMap", {}); - - float airMass = SpeedDensityBase::getAirmassImpl(ENGINE(engineState.currentBaroCorrectedVE), adjustedMap, tChargeK PASS_ENGINE_PARAMETER_SUFFIX); - if (cisnan(airMass)) { - warning(CUSTOM_ERR_6685, "NaN airMass"); - return {}; - } -#if EFI_PRINTF_FUEL_DETAILS - printf("getSpeedDensityAirmass map=%.2f adjustedMap=%.2f airMass=%.2f\t\n", - map, adjustedMap, engine->engineState.sd.adjustedManifoldAirPressure); -#endif /*EFI_PRINTF_FUEL_DETAILS */ - - return { - airMass, - map, // AFR/VE table Y axis - }; -} - void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setRpmTableBin(config->veRpmBins, FUEL_RPM_COUNT); veMap.setAll(80); diff --git a/firmware/controllers/math/speed_density.h b/firmware/controllers/math/speed_density.h index 9e2565592b..8933df5233 100644 --- a/firmware/controllers/math/speed_density.h +++ b/firmware/controllers/math/speed_density.h @@ -18,4 +18,3 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX); void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE); void initSpeedDensity(DECLARE_ENGINE_PARAMETER_SIGNATURE); -AirmassResult getSpeedDensityAirmass(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index fc4cdff7b3..e06e6f91d1 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -1261,7 +1261,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"can_vss", setCanVss}, #endif /* EFI_CAN_SUPPORT */ #if EFI_IDLE_CONTROL - {"idle_position", setIdleValvePosition}, + {"idle_position", setManualIdleValvePosition}, {"idle_rpm", setTargetIdleRpm}, {"idle_dt", setIdleDT}, #endif /* EFI_IDLE_CONTROL */ diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index 50004bf618..4a24fce5c6 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -323,7 +323,10 @@ bool OutputPin::getAndSet(int logicValue) { } void OutputPin::setValue(int logicValue) { - ScopePerf perf(PE::OutputPinSetValue); +#if ENABLE_PERF_TRACE +// todo: https://github.com/rusefi/rusefi/issues/1638 +// ScopePerf perf(PE::OutputPinSetValue); +#endif // ENABLE_PERF_TRACE #if EFI_PROD_CODE efiAssertVoid(CUSTOM_ERR_6621, modePtr!=NULL, "pin mode not initialized"); diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 10d2d826b6..175241952b 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -18,6 +18,9 @@ ! rename the bit or substitute unused integer with any new fields of the same size ! invoke gen_config.bat to apply the tools which would generate .h and .ini files ! +! Q: Which files to include into Pull Requests? +! A: Please only include source files (.txt and .input) into a PR, we have amazing GitHub Actions which would do the rest really +! really nicely! ! ! each field is declared as ! type name;comment @@ -289,8 +292,8 @@ struct spi_pins end_struct -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" -custom gppwm_channel_e 1 bits, U08, @OFFSET@, [0:1], @@gppwm_channel_e_enum@@ +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" +custom gppwm_channel_e 1 bits, U08, @OFFSET@, [0:2], @@gppwm_channel_e_enum@@ struct gppwm_channel output_pin_e pin;+Select a pin to use for PWM or on-off output.; @@ -432,7 +435,7 @@ ThermistorConf iat; float knockBandCustom;+We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override;"kHz", 1, 0.0, 0.0, 10.0, 2 -float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On single-coil or wasted spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 +float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On Single Coil or Wasted Spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 float[DWELL_CURVE_SIZE] sparkDwellValues;;"ms", 1, 0.0, 0.0, 30.0, 2 struct_no_prefix specs_s @@ -456,8 +459,7 @@ end_struct int sensorSnifferRpmThreshold;+Disable sensor sniffer above this rpm;"RPM", 1, 0, 0,30000, 0 int rpmHardLimit;set rpm_hard_limit X;"rpm", 1, 0, 0, 20000.0, 2 - -#define engine_load_mode_e_enum "INVALID", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID" +#define engine_load_mode_e_enum "INVALID", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:2], @@engine_load_mode_e_enum@@ @@ -470,8 +472,8 @@ injection_mode_e injectionMode;+This is where the fuel injection type is defined angle_t 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?;"deg", 1, 0.0, -720, 720, 2 angle_t crankingTimingAngle;+Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X; "deg", 1, 0.0, -360, 360, 2 -custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" -ignition_mode_e ignitionMode;+"One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X +custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" +ignition_mode_e ignitionMode;+"Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X angle_t ignitionOffset;+this value could be used to offset the whole ignition timing table by a constant;"RPM", 1, 0, 0, 3000.0, 0 @@ -707,7 +709,7 @@ bit is_enabled_spi_2 bit useIdleTimingPidControl bit useTPSBasedVeTable bit is_enabled_spi_4 - bit pauseEtbControl;+Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle. + bit pauseEtbControl;+Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. bit alignEngineSnifferAtTDC bit useETBforIdleControl;+This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle. bit idleIncrementalPidCic @@ -826,7 +828,7 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:1], @@maf_sensor_type_e_enum@ bit enableInnovateLC2 bit showHumanReadableWarning bit stftIgnoreErrorMagnitude;+If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.; - bit unusedBit_251_11 + bit dcMotorIdleValve;+Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s). bit unusedBit_251_12 bit unusedBit_251_13 bit unusedBit_251_14 @@ -950,7 +952,7 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual" bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed bit twoWireBatchInjection;+This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection bit useOnlyRisingEdgeForTrigger;+VR sensors are only precise on rising front\nenable trigger_only_front - bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). bit useFixedBaroCorrFromMap bit useSeparateAdvanceForCranking;+This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant. bit useAdvanceCorrectionsForCranking;+This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle). @@ -1673,4 +1675,4 @@ end_struct #define show_test_presets true #define show_Frankenso_presets true #define show_microRusEFI_presets true -#define show_Proteus_presets true \ No newline at end of file +#define show_Proteus_presets true diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index bb90ae2300..05c73eb783 100644 Binary files a/firmware/tunerstudio/generated/cache.zip and b/firmware/tunerstudio/generated/cache.zip differ diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 13d4d576a1..9dc2483b9f 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.all.692540479" + signature = "rusEFI 2020.07.28.all.1542883429" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.all.692540479" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.all.1542883429" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3550,7 +3553,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4147,13 +4150,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4161,11 +4164,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4177,8 +4181,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_frankenso.ini b/firmware/tunerstudio/generated/rusefi_frankenso.ini deleted file mode 100644 index d2b1ca752a..0000000000 --- a/firmware/tunerstudio/generated/rusefi_frankenso.ini +++ /dev/null @@ -1,4454 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; 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 - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.frankenso_na6.2468827536" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.frankenso_na6.2468827536" ; 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" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;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 - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; 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 rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:47 UTC 2020 - -pageSize = 20000 -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, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [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", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [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", "dev 2JZ 3/34 simulator", "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", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 701, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 702, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 749, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 750, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 751, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre 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" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \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" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - 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.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when 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 = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - 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)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[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, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - 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, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - 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" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - 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, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - 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, RPMValue - 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, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - 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 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; 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, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - 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 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 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 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "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 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "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: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - 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 }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; 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 - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - 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 = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = cj125Function, "CJ125 settings (wbo decoder)" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - subMenu = egtInputs, "EGT" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = lcdScreen, "LCD" - subMenu = joystickPanel, "Joystick" - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[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. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -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_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -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" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - 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 = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - 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} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - 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 - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - 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 = "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 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - 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 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "GPS RX", gps_rx_pin - field = "GPS TX", gps_tx_pin - field = "CAN RX pin", canRxPin - field = "CAN TX pin", canTxPin - 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 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 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} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - 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 = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; 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 = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - 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 = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {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 = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {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 = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {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 = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {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 = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider ratio", analogInputDividerCoefficient - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - field = "RX pin", canRxPin - field = "TX pin", canTxPin - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - 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 = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = tsPort - panel = canBus - panel = auxSerial - panel = sdCard - panel = gpsReceiver - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - 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 = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - 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 = "Come To Pit", cmd_call_from_pit - 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 - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - 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 mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - 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 - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 35f7da6009..4e441db4c1 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.frankenso_na6.4156569820" + signature = "rusEFI 2020.07.28.frankenso_na6.2238833798" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.frankenso_na6.4156569820" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.frankenso_na6.2238833798" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:10 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:18 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3550,7 +3553,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4147,13 +4150,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4161,11 +4164,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4177,8 +4181,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 9bf176b70a..dadc85ae83 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.kin.3833170085" + signature = "rusEFI 2020.07.28.kin.2529711359" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.kin.3833170085" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.kin.2529711359" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3551,7 +3554,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4148,13 +4151,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4162,11 +4165,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4178,8 +4182,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_microrusefi.ini b/firmware/tunerstudio/generated/rusefi_microrusefi.ini deleted file mode 100644 index 72cbb26b71..0000000000 --- a/firmware/tunerstudio/generated/rusefi_microrusefi.ini +++ /dev/null @@ -1,4425 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; 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 - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.mre_f7.73329661" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.mre_f7.73329661" ; 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" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;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 - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; 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 rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:43 UTC 2020 - -pageSize = 20000 -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, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [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", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [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", "dev 2JZ 3/34 simulator", "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", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 701, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 702, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 749, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 750, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 751, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre 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" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \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" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - 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.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when 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 = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - 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)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[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, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - 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, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - 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" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - 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, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - 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, RPMValue - 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, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - 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 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; 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, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - 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 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 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 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "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 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "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: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - 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 }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; 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 - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - 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 = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[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. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -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_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -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" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - 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 = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - 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} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - 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 - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - 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 = "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 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - 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 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - 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 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 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} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - 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 = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; 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 = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "microRusEFI main relay control is hard wired on pin #29" - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - 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 = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {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 = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {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 = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {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 = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {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 = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - 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 = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = canBus - panel = auxSerial - panel = sdCard - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - 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 = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - 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 = "Come To Pit", cmd_call_from_pit - 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 - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - - - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - 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 mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - 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 - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 5d5167fcc2..e7613cd9f5 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.mre_f4.1622770353" + signature = "rusEFI 2020.07.28.mre_f4.302538475" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.mre_f4.1622770353" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f4.302538475" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:09 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:17 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3533,7 +3536,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4124,13 +4127,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4138,11 +4141,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4154,8 +4158,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 54e84e4549..a08d7cc599 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.mre_f7.1622770353" + signature = "rusEFI 2020.07.28.mre_f7.302538475" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.mre_f7.1622770353" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f7.302538475" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:05 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:16 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3533,7 +3536,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4124,13 +4127,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4138,11 +4141,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4154,8 +4158,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_prometheus.ini b/firmware/tunerstudio/generated/rusefi_prometheus.ini deleted file mode 100644 index 7022c6e2ba..0000000000 --- a/firmware/tunerstudio/generated/rusefi_prometheus.ini +++ /dev/null @@ -1,4450 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; 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 - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.prometheus_469.3099387383" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.prometheus_469.3099387383" ; 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" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;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 - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; 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 rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:48 UTC 2020 - -pageSize = 20000 -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, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [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", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [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", "dev 2JZ 3/34 simulator", "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", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - mafAdcChannel = bits, U08, 543, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 701, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 702, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 749, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 750, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 751, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - cj125ur = bits, U08, 2610, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre 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" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \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" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - 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.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when 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 = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - 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)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[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, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - 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, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - 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" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - 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, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - 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, RPMValue - 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, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - 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 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; 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, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - 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 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 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 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "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 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "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: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - 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 }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; 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 - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - 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 = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = cj125Function, "CJ125 settings (wbo decoder)" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - subMenu = egtInputs, "EGT" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = lcdScreen, "LCD" - subMenu = joystickPanel, "Joystick" - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[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. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -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_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -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" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - 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 = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - 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} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - 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 - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - 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 = "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 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - 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 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "GPS RX", gps_rx_pin - field = "GPS TX", gps_tx_pin - field = "CAN RX pin", canRxPin - field = "CAN TX pin", canTxPin - 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 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 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} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - 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 = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; 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 = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - 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 = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {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 = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {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 = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {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 = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {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 = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider ratio", analogInputDividerCoefficient - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - field = "RX pin", canRxPin - field = "TX pin", canTxPin - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - 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 = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = tsPort - panel = canBus - panel = auxSerial - panel = sdCard - panel = gpsReceiver - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - 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 = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - 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 = "Come To Pit", cmd_call_from_pit - 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 - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - 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 mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - 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 - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index c34e62a29c..0299d55e77 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.prometheus_405.3696987323" + signature = "rusEFI 2020.07.28.prometheus_405.2934591713" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.prometheus_405.3696987323" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_405.2934591713" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:13 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:21 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3546,7 +3549,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4143,13 +4146,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4157,11 +4160,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4173,8 +4177,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index eb6b6e7b94..45a479c303 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.prometheus_469.3696987323" + signature = "rusEFI 2020.07.28.prometheus_469.2934591713" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.prometheus_469.3696987323" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_469.2934591713" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:11 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:20 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3546,7 +3549,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4143,13 +4146,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4157,11 +4160,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4173,8 +4177,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_proteus.ini b/firmware/tunerstudio/generated/rusefi_proteus.ini deleted file mode 100644 index a04f83feba..0000000000 --- a/firmware/tunerstudio/generated/rusefi_proteus.ini +++ /dev/null @@ -1,4421 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; 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 - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.proteus_f7.3224456380" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.proteus_f7.3224456380" ; 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" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;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 - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; 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 rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:51 UTC 2020 - -pageSize = 20000 -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, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [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", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [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", "dev 2JZ 3/34 simulator", "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", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 701, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 702, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 749, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 750, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 751, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre 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" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \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" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - 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.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when 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 = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - 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)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[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, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - 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, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - 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" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - 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, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - 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, RPMValue - 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, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - 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 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; 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, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - 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 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 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 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "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 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "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: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - 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 }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; 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 - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - 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 = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[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. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -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_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -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" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - 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 = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - 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} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - 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 - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - 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 = "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 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - 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 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - 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 = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; 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 = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - 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 = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {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 = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {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 = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {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 = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {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 = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - 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 = tle8888, "TLE8888", yAxis - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = canBus - panel = auxSerial - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - 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 = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - 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 = "Come To Pit", cmd_call_from_pit - 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 - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - 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 mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - 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 - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 4f4a7713fb..c417aec74f 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.proteus_f4.2765497840" + signature = "rusEFI 2020.07.28.proteus_f4.3597138346" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.proteus_f4.2765497840" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f4.3597138346" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:16 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:23 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3525,7 +3528,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4114,13 +4117,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4128,11 +4131,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4144,8 +4148,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 5e67ef8f94..36bd07cb6a 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.proteus_f7.2765497840" + signature = "rusEFI 2020.07.28.proteus_f7.3597138346" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.proteus_f7.2765497840" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f7.3597138346" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:14 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:22 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -541,7 +541,7 @@ page = 1 enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + dcMotorIdleValve = bits, U32, 976, [11:11], "false", "true" unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" 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 = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks 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" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" @@ -1246,6 +1246,7 @@ page = 1 sensorChartMode = "rusEfi console Sensor Sniffer mode" useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" + dcMotorIdleValve = "Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s)." launchSpeedTreshold = "Disabled above this speed" launchRpmTreshold = "Disabled below this rpm" launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" @@ -1284,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" @@ -1490,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -1631,7 +1632,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -1647,10 +1648,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -2226,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -3525,7 +3528,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -4114,13 +4117,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -4128,11 +4131,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == 16 } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -4144,8 +4148,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != 16 } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != 16) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index ba7a7cfdb7..24dc673d4c 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -206,8 +206,8 @@ enable2ndByteCanID = false internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 intake = scalar, S16, 14, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 ; throttle, pedal @@ -347,7 +347,7 @@ enable2ndByteCanID = false rawOilPressure = scalar, U16, 242, "V",{1/@@PACK_MULT_VOLTAGE@@}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct @@ -362,10 +362,10 @@ enable2ndByteCanID = false time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 @@ -931,6 +931,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, @@GAUGE_NAME_ECU_TEMPERATURE@@, "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 @@ -2131,9 +2133,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = baroSettings, "Baro sensor" field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} + field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} + field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} + field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} dialog = mapCurves, "MAP sampling", yAxis field = "isMapAveragingEnabled", isMapAveragingEnabled @@ -2159,7 +2161,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = egoSettings, "", yAxis panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} + panel = egoSettings_sensor, {afr_hwChannel != @@ADC_CHANNEL_NONE@@ && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } @@ -2244,7 +2246,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle @@ -2842,13 +2844,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -2856,11 +2858,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == @@ADC_CHANNEL_NONE@@ } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -2872,8 +2875,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! diff --git a/java_console/.idea/libraries/dfu_java.xml b/java_console/.idea/libraries/dfu_java.xml new file mode 100644 index 0000000000..d471a6f9e2 --- /dev/null +++ b/java_console/.idea/libraries/dfu_java.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java_console/.idea/libraries/jsr305_2_0_1.xml b/java_console/.idea/libraries/jsr305_2_0_1.xml new file mode 100644 index 0000000000..7d31d5712f --- /dev/null +++ b/java_console/.idea/libraries/jsr305_2_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java_console/.idea/libraries/log4j_api_2_13_3.xml b/java_console/.idea/libraries/log4j_api_2_13_3.xml new file mode 100644 index 0000000000..ea97150b0e --- /dev/null +++ b/java_console/.idea/libraries/log4j_api_2_13_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java_console/.idea/runConfigurations/Launcher_network_connector.xml b/java_console/.idea/runConfigurations/Launcher_network_connector.xml new file mode 100644 index 0000000000..c24e56ca1a --- /dev/null +++ b/java_console/.idea/runConfigurations/Launcher_network_connector.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/java_console/autotest/src/com/rusefi/AutoTest.java b/java_console/autotest/src/com/rusefi/AutoTest.java index 8c71ae3bcd..e8dc3cff7d 100644 --- a/java_console/autotest/src/com/rusefi/AutoTest.java +++ b/java_console/autotest/src/com/rusefi/AutoTest.java @@ -555,7 +555,7 @@ public class AutoTest { boolean failed = false; try { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); IoUtil.connectToSimulator(linkManager, startSimulator); new AutoTest(linkManager, linkManager.getCommandQueue()).mainTestBody(); } catch (Throwable e) { diff --git a/java_console/autotest/src/com/rusefi/EnduranceTest.java b/java_console/autotest/src/com/rusefi/EnduranceTest.java index 055ae8177e..a152327ed0 100644 --- a/java_console/autotest/src/com/rusefi/EnduranceTest.java +++ b/java_console/autotest/src/com/rusefi/EnduranceTest.java @@ -12,7 +12,7 @@ public class EnduranceTest { private static final int DEFAULT_COUNT = 2000; public static void main(String[] args) { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); CommandQueue commandQueue = linkManager.getCommandQueue(); long start = System.currentTimeMillis(); int count = parseCount(args); diff --git a/java_console/autotest/src/com/rusefi/RealHwTest.java b/java_console/autotest/src/com/rusefi/RealHwTest.java index 243628cb52..4977542b84 100644 --- a/java_console/autotest/src/com/rusefi/RealHwTest.java +++ b/java_console/autotest/src/com/rusefi/RealHwTest.java @@ -1,6 +1,5 @@ package com.rusefi; -import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; import org.jetbrains.annotations.NotNull; @@ -83,7 +82,7 @@ public class RealHwTest { } private static void runRealHardwareTest(String port) throws Exception { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); IoUtil.realHardwareConnect(linkManager, port); new AutoTest(linkManager, linkManager.getCommandQueue()).mainTestBody(); } diff --git a/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java b/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java index 5f7f6f4e49..56c842443e 100644 --- a/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java +++ b/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java @@ -11,6 +11,8 @@ import java.util.function.Consumer; * Andrey Belomutskiy, (c) 2013-2020 */ public class SimulatorExecHelper { + private final static NamedThreadFactory THREAD_FACTORY = new NamedThreadFactory("SimulatorExecHelper", true); + // see also SimulatorHelper private static final String SIMULATOR_BINARY = "../simulator/build/rusefi_simulator.exe"; static Process simulatorProcess; @@ -42,8 +44,7 @@ public class SimulatorExecHelper { public static void dumpProcessOutput(Process process) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); - Thread thread = new Thread(createErrorStreamEcho(process)); - thread.setDaemon(true); + Thread thread = THREAD_FACTORY.newThread(createErrorStreamEcho(process)); thread.start(); String prefix = "from console: "; diff --git a/java_console/bin/dfu_program.sh b/java_console/bin/dfu_program.sh new file mode 100755 index 0000000000..5179c03d71 --- /dev/null +++ b/java_console/bin/dfu_program.sh @@ -0,0 +1 @@ +java -jar console/rusefi_console.jar dfu $1 \ No newline at end of file diff --git a/java_console/build.xml b/java_console/build.xml index 8b321d3275..1443d75855 100644 --- a/java_console/build.xml +++ b/java_console/build.xml @@ -2,7 +2,7 @@ - + @@ -56,7 +56,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -111,6 +111,9 @@ + + + @@ -148,6 +151,14 @@ + + + + + + + + diff --git a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java index fa5e27f26f..9e215204ec 100644 --- a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java +++ b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java @@ -12,6 +12,8 @@ public interface WriteStream { */ void write(byte[] bytes) throws IOException; + void flush() throws IOException; + default void write(byte value) throws IOException { write(new byte[]{value}); } diff --git a/java_console/io/src/main/java/com/rusefi/Listener.java b/java_console/io/src/main/java/com/rusefi/Listener.java index 3722c6e526..064e0f8f85 100644 --- a/java_console/io/src/main/java/com/rusefi/Listener.java +++ b/java_console/io/src/main/java/com/rusefi/Listener.java @@ -2,4 +2,9 @@ package com.rusefi; public interface Listener { void onResult(T parameter); + + static Listener empty() { + return parameter -> { + }; + } } diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java deleted file mode 100644 index 099b2653ba..0000000000 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.rusefi; - -import com.opensr5.Logger; -import com.rusefi.io.IoStream; -import com.rusefi.io.commands.HelloCommand; -import com.rusefi.io.tcp.BinaryProtocolProxy; -import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.server.ApplicationRequest; -import com.rusefi.server.rusEFISSLContext; -import com.rusefi.tools.online.HttpUtil; -import com.rusefi.tools.online.ProxyClient; -import org.apache.http.HttpResponse; - -import java.io.IOException; - -public class LocalApplicationProxy { - public static final int SERVER_PORT_FOR_APPLICATIONS = 8002; - private final Logger logger; - private final ApplicationRequest applicationRequest; - - public LocalApplicationProxy(Logger logger, ApplicationRequest applicationRequest) { - this.logger = logger; - this.applicationRequest = applicationRequest; - } - - /** - * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections - * @param applicationRequest remote session we want to connect to - * @param authenticatorPort local port we would bind for TunerStudio to connect to - * @param httpPort - */ - static void startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int authenticatorPort, int httpPort) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(ProxyClient.getHttpAddress(httpPort) + ProxyClient.VERSION_PATH); - String version = HttpUtil.getResponse(httpResponse); - logger.info("Version=" + version); - if (!version.contains(ProxyClient.BACKEND_VERSION)) - throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); - - IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers)); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); - localApplicationProxy.run(authenticatorToProxyStream); - - BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, authenticatorPort); - } - - public void run(IoStream authenticatorToProxyStream) throws IOException { - // right from connection push session authentication data - new HelloCommand(logger, applicationRequest.toJson()).handle(authenticatorToProxyStream); - } - - public static void start(String[] strings) { - } -} diff --git a/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java b/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java index 3d1dd4e7c4..cc9457076d 100644 --- a/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java +++ b/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java @@ -9,15 +9,23 @@ import java.util.concurrent.atomic.AtomicInteger; public class NamedThreadFactory implements ThreadFactory { private final AtomicInteger counter = new AtomicInteger(); private String name; + private final boolean isDaemon; public NamedThreadFactory(String name) { - this.name = name; + this(name, false); } + public NamedThreadFactory(String name, boolean isDaemon) { + this.name = name; + this.isDaemon = isDaemon; + } + + @Override public Thread newThread(@NotNull Runnable r) { Thread t = Executors.defaultThreadFactory().newThread(r); t.setName(name + counter.incrementAndGet()); + t.setDaemon(isDaemon); return t; } } diff --git a/java_console/io/src/main/java/com/rusefi/Timeouts.java b/java_console/io/src/main/java/com/rusefi/Timeouts.java index dabbab278a..0ea6bfe7c0 100644 --- a/java_console/io/src/main/java/com/rusefi/Timeouts.java +++ b/java_console/io/src/main/java/com/rusefi/Timeouts.java @@ -5,6 +5,7 @@ package com.rusefi; */ public interface Timeouts { int SECOND = 1000; + int MINUTE = 60 * SECOND; int COMMAND_TIMEOUT_SEC = 10; // seconds /** diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java similarity index 87% rename from java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java rename to java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java index 9840a04c3f..d06ce4e72e 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java @@ -1,6 +1,6 @@ package com.rusefi.autodetect; -import com.rusefi.FileLog; +import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; @@ -19,24 +19,28 @@ import java.util.function.Function; * Andrey Belomutskiy, (c) 2013-2020 */ public class PortDetector { + private final static Logging log = Logging.getLogging(PortDetector.class); + private static final NamedThreadFactory AUTO_DETECT_PORT = new NamedThreadFactory("AutoDetectPort"); /** * Connect to all serial ports and find out which one respond first * @param callback + * @return port name on which rusEFI was detected or null if none */ + @Nullable public static String autoDetectSerial(Function callback) { String[] serialPorts = getPortNames(); if (serialPorts.length == 0) { - System.err.println("No serial ports detected"); + log.error("No serial ports detected"); return null; } - FileLog.MAIN.logLine("Trying " + Arrays.toString(serialPorts)); + log.info("Trying " + Arrays.toString(serialPorts)); List serialFinder = new ArrayList<>(); CountDownLatch portFound = new CountDownLatch(1); AtomicReference result = new AtomicReference<>(); for (String serialPort : serialPorts) { - Thread thread = AUTO_DETECT_PORT.newThread(new SerialAutoChecker(FileLog.LOGGER, serialPort, portFound, result, callback)); + Thread thread = AUTO_DETECT_PORT.newThread(new SerialAutoChecker(serialPort, portFound, result, callback)); serialFinder.add(thread); thread.start(); } diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java similarity index 71% rename from java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java rename to java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java index 933c675737..93f73b8c47 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java @@ -1,7 +1,6 @@ package com.rusefi.autodetect; -import com.opensr5.Logger; -import com.rusefi.FileLog; +import com.devexperts.logging.Logging; import com.rusefi.binaryprotocol.BinaryProtocolCommands; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; @@ -17,38 +16,36 @@ import java.util.function.Function; import static com.rusefi.binaryprotocol.IoHelper.checkResponseCode; public class SerialAutoChecker implements Runnable { - private final Logger logger; + private final static Logging log = Logging.getLogging(SerialAutoChecker.class); private final String serialPort; private final CountDownLatch portFound; private final AtomicReference result; private final Function callback; public static String SIGNATURE; - public SerialAutoChecker(Logger logger, String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { - this.logger = logger; + public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { this.serialPort = serialPort; this.portFound = portFound; this.result = result; this.callback = callback; } - public SerialAutoChecker(Logger logger, String serialPort, CountDownLatch portFound, AtomicReference result) { - this(logger, serialPort, portFound, result, null); + public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result) { + this(serialPort, portFound, result, null); } @Override public void run() { - IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort, logger); - Logger logger = FileLog.LOGGER; + IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort); IncomingDataBuffer incomingData = stream.getDataBuffer(); try { - HelloCommand.send(stream, logger); - byte[] response = incomingData.getPacket(logger, "", false); + HelloCommand.send(stream); + byte[] response = incomingData.getPacket("", false); if (!checkResponseCode(response, BinaryProtocolCommands.RESPONSE_OK)) return; String signature = new String(response, 1, response.length - 1); SIGNATURE = signature; - System.out.println("Got signature=" + signature + " from " + serialPort); + log.info("Got signature=" + signature + " from " + serialPort); if (signature.startsWith(Fields.PROTOCOL_SIGNATURE_PREFIX)) { if (callback != null) { callback.apply(stream); diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index 7509f55585..37bf3d93f4 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -1,15 +1,20 @@ package com.rusefi.binaryprotocol; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.opensr5.Logger; import com.opensr5.io.ConfigurationImageFile; import com.opensr5.io.DataListener; import com.rusefi.ConfigurationImageDiff; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.composite.CompositeEvent; import com.rusefi.composite.CompositeParser; import com.rusefi.config.generated.Fields; -import com.rusefi.core.*; +import com.rusefi.core.MessagesCentral; +import com.rusefi.core.Pair; +import com.rusefi.core.Sensor; +import com.rusefi.core.SensorCentral; import com.rusefi.io.*; import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.stream.LogicdataStreamFile; @@ -28,23 +33,23 @@ import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.*; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.*; /** * This object represents logical state of physical connection. - * + *

* Instance is connected until we experience issues. Once we decide to close the connection there is no restart - * new instance of this class would need to be created once we establish a new physical connection. - * + *

* Andrey Belomutskiy, (c) 2013-2020 * 3/6/2015 */ public class BinaryProtocol implements BinaryProtocolCommands { + private static final Logging log = getLogging(BinaryProtocol.class); + private static final ThreadFactory THREAD_FACTORY = new NamedThreadFactory("text pull"); private static final String USE_PLAIN_PROTOCOL_PROPERTY = "protocol.plain"; private static final String CONFIGURATION_RUSEFI_BINARY = "current_configuration.rusefi_binary"; @@ -57,7 +62,6 @@ public class BinaryProtocol implements BinaryProtocolCommands { public static boolean PLAIN_PROTOCOL = Boolean.getBoolean(USE_PLAIN_PROTOCOL_PROPERTY); private final LinkManager linkManager; - private final Logger logger; private final IoStream stream; private final IncomingDataBuffer incomingData; private boolean isBurnPending; @@ -89,6 +93,8 @@ public class BinaryProtocol implements BinaryProtocolCommands { return "HELLO"; case Fields.TS_READ_COMMAND: return "READ"; + case Fields.TS_GET_TEXT: + return "TS_GET_TEXT"; case Fields.TS_GET_FIRMWARE_VERSION: return "GET_FW_VERSION"; case Fields.TS_CHUNK_WRITE_COMMAND: @@ -96,7 +102,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { case Fields.TS_OUTPUT_COMMAND: return "TS_OUTPUT_COMMAND"; default: - return "command " + (char) + command + "/" + command; + return "command " + (char) +command + "/" + command; } } @@ -130,15 +136,14 @@ public class BinaryProtocol implements BinaryProtocolCommands { private final Thread hook = new Thread(() -> closeComposites(), "BinaryProtocol::hook"); - public BinaryProtocol(LinkManager linkManager, final Logger logger, IoStream stream, IncomingDataBuffer dataBuffer) { + public BinaryProtocol(LinkManager linkManager, IoStream stream, IncomingDataBuffer dataBuffer) { this.linkManager = linkManager; - this.logger = logger; this.stream = stream; communicationLoggingListener = new CommunicationLoggingListener() { @Override public void onPortHolderMessage(Class clazz, String message) { - MessagesCentral.getInstance().postMessage(logger, clazz, message); + MessagesCentral.getInstance().postMessage(clazz, message); } }; @@ -150,7 +155,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { needCompositeLogger = linkManager.getCompositeLogicEnabled(); lastLowRpmTime = System.currentTimeMillis(); } else if (System.currentTimeMillis() - lastLowRpmTime > HIGH_RPM_DELAY * Timeouts.SECOND) { - logger.info("Time to turn off composite logging"); + log.info("Time to turn off composite logging"); needCompositeLogger = false; } }; @@ -175,7 +180,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } public void doSend(final String command, boolean fireEvent) throws InterruptedException { - logger.info("Sending [" + command + "]"); + log.info("Sending [" + command + "]"); if (fireEvent && LinkManager.LOG_LEVEL.isDebugEnabled()) { communicationLoggingListener.onPortHolderMessage(BinaryProtocol.class, "Sending [" + command + "]"); } @@ -197,7 +202,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } catch (ExecutionException e) { throw new IllegalStateException(e); } catch (TimeoutException e) { - getLogger().error("timeout sending [" + command + "] giving up: " + e); + log.error("timeout sending [" + command + "] giving up: " + e); return; } /** @@ -224,7 +229,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { private void startTextPullThread(final DataListener listener) { if (!linkManager.COMMUNICATION_QUEUE.isEmpty()) { - System.out.println("Current queue: " + linkManager.COMMUNICATION_QUEUE.size()); + log.info("Current queue: " + linkManager.COMMUNICATION_QUEUE.size()); } Runnable textPull = new Runnable() { @Override @@ -247,11 +252,10 @@ public class BinaryProtocol implements BinaryProtocolCommands { } sleep(Timeouts.TEXT_PULL_PERIOD); } - logger.info("Stopping text pull"); + log.info("Stopping text pull"); } }; - Thread tr = new Thread(textPull); - tr.setName("text pull"); + Thread tr = THREAD_FACTORY.newThread(textPull); tr.start(); } @@ -275,10 +279,6 @@ public class BinaryProtocol implements BinaryProtocolCommands { compositeLogs.clear(); } - public Logger getLogger() { - return logger; - } - private void dropPending() { synchronized (ioLock) { if (isClosed) @@ -315,7 +315,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { private byte[] receivePacket(String msg, boolean allowLongResponse) throws EOFException { long start = System.currentTimeMillis(); synchronized (ioLock) { - return incomingData.getPacket(logger, msg, allowLongResponse, start); + return incomingData.getPacket(msg, allowLongResponse, start); } } @@ -331,7 +331,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { return; } setController(image); - logger.info("Got configuration from controller."); + log.info("Got configuration from controller."); ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.CONNECTED); } @@ -343,7 +343,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { int offset = 0; long start = System.currentTimeMillis(); - logger.info("Reading from controller..."); + log.info("Reading from controller..."); while (offset < image.getSize() && (System.currentTimeMillis() - start < Timeouts.READ_IMAGE_TIMEOUT)) { if (isClosed) @@ -363,7 +363,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { if (!checkResponseCode(response, RESPONSE_OK) || response.length != requestSize + 1) { String code = (response == null || response.length == 0) ? "empty" : "code " + response[0]; String info = response == null ? "NO RESPONSE" : (code + " size " + response.length); - logger.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info); + log.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info); continue; } @@ -396,7 +396,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { if (localCached != null) { int crcOfLocallyCachedConfiguration = IoHelper.getCrc32(localCached.getContent()); - System.out.printf(CONFIGURATION_RUSEFI_BINARY + " Local cache CRC %x\n", crcOfLocallyCachedConfiguration); + log.info(String.format(CONFIGURATION_RUSEFI_BINARY + " Local cache CRC %x\n", crcOfLocallyCachedConfiguration)); byte packet[] = new byte[7]; packet[0] = COMMAND_CRC_CHECK_COMMAND; @@ -407,7 +407,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { // that's unusual - most of the protocol is LITTLE_ENDIAN bb.order(ByteOrder.BIG_ENDIAN); int crcFromController = bb.getInt(); - System.out.printf("From rusEFI CRC %x\n", crcFromController); + log.info(String.format("From rusEFI CRC %x\n", crcFromController)); if (crcOfLocallyCachedConfiguration == crcFromController) { return localCached; } @@ -435,7 +435,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { sendPacket(packet); return receivePacket(msg, allowLongResponse); } catch (IOException e) { - logger.error(msg + ": executeCommand failed: " + e); + log.error(msg + ": executeCommand failed: " + e); close(); return null; } @@ -509,7 +509,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } private void sendPacket(byte[] command) throws IOException { - stream.sendPacket(command, logger); + stream.sendPacket(command); } @@ -549,7 +549,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { Thread.sleep(100); return new String(response, 1, response.length - 1); } catch (InterruptedException e) { - logger.error(e.toString()); + log.error(e.toString()); return null; } } diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 017fe2af9e..a199d4526c 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -1,6 +1,6 @@ package com.rusefi.binaryprotocol; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Timeouts; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; @@ -13,6 +13,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Objects; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.*; /** @@ -23,39 +24,44 @@ import static com.rusefi.binaryprotocol.IoHelper.*; */ @ThreadSafe public class IncomingDataBuffer { + private static final Logging log = getLogging(IoStream.class); + private static final int BUFFER_SIZE = 32768; private static String loggingPrefix; /** * buffer for response bytes from controller */ private final CircularByteBuffer cbb; - private final Logger logger; private final AbstractIoStream.StreamStats streamStats; - public IncomingDataBuffer(Logger logger, AbstractIoStream.StreamStats streamStats) { + public IncomingDataBuffer(AbstractIoStream.StreamStats streamStats) { this.streamStats = Objects.requireNonNull(streamStats, "streamStats"); this.cbb = new CircularByteBuffer(BUFFER_SIZE); - this.logger = logger; } - public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream, Logger logger) { + public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream) { IncomingDataBuffer.loggingPrefix = loggingPrefix; - IncomingDataBuffer incomingData = new IncomingDataBuffer(logger, stream.getStreamStats()); + IncomingDataBuffer incomingData = new IncomingDataBuffer(stream.getStreamStats()); stream.setInputListener(incomingData::addData); return incomingData; } - public byte[] getPacket(Logger logger, String msg, boolean allowLongResponse) throws EOFException { - return getPacket(logger, msg, allowLongResponse, System.currentTimeMillis()); + public byte[] getPacket(String msg, boolean allowLongResponse) throws EOFException { + return getPacket(msg, allowLongResponse, System.currentTimeMillis()); } - public byte[] getPacket(Logger logger, String msg, boolean allowLongResponse, long start) throws EOFException { + /** + * why does this method return NULL in case of timeout?! + * todo: there is a very similar BinaryProtocolServer#readPromisedBytes which throws exception in case of timeout + */ + public byte[] getPacket(String msg, boolean allowLongResponse, long start) throws EOFException { boolean isTimeout = waitForBytes(msg + " header", start, 2); if (isTimeout) return null; int packetSize = swap16(getShort()); - logger.trace( loggingPrefix + "Got packet size " + packetSize); + if (log.debugEnabled()) + log.debug(loggingPrefix + "Got packet size " + packetSize); if (packetSize < 0) return null; if (!allowLongResponse && packetSize > Math.max(BinaryProtocolCommands.BLOCKING_FACTOR, Fields.TS_OUTPUT_SIZE) + 10) @@ -72,20 +78,26 @@ public class IncomingDataBuffer { boolean isCrcOk = actualCrc == packetCrc; if (!isCrcOk) { - logger.trace(String.format("%x", actualCrc) + " vs " + String.format("%x", packetCrc)); + if (log.debugEnabled()) + log.debug(String.format("%x", actualCrc) + " vs " + String.format("%x", packetCrc)); return null; } - streamStats.onPacketArrived(); - logger.trace("packet " + Arrays.toString(packet) + ": crc OK"); + onPacketArrived(); + if (log.debugEnabled()) + log.debug("packet " + Arrays.toString(packet) + ": crc OK"); return packet; } + public void onPacketArrived() { + streamStats.onPacketArrived(); + } + public void addData(byte[] freshData) { - logger.info("IncomingDataBuffer: " + freshData.length + " byte(s) arrived"); + log.info("IncomingDataBuffer: " + freshData.length + " byte(s) arrived"); synchronized (cbb) { if (cbb.size() - cbb.length() < freshData.length) { - logger.error("IncomingDataBuffer: buffer overflow not expected"); + log.error("IncomingDataBuffer: buffer overflow not expected"); cbb.clear(); } cbb.put(freshData); @@ -102,19 +114,22 @@ public class IncomingDataBuffer { return waitForBytes(Timeouts.BINARY_IO_TIMEOUT, loggingMessage, startTimestamp, count); } + /** + * @return true in case of timeout, false if we have received count of bytes + */ public boolean waitForBytes(int timeoutMs, String loggingMessage, long startTimestamp, int count) { - logger.info(loggingMessage + ": waiting for " + count + " byte(s)"); + log.info(loggingMessage + ": waiting for " + count + " byte(s)"); synchronized (cbb) { while (cbb.length() < count) { int timeout = (int) (startTimestamp + timeoutMs - System.currentTimeMillis()); if (timeout <= 0) { - logger.info(loggingMessage + ": timeout. Got only " + cbb.length()); + log.info(loggingMessage + ": timeout. Got only " + cbb.length()); return true; // timeout. Sad face. } try { cbb.wait(timeout); } catch (InterruptedException e) { - throw new IllegalStateException(e); + return true; // thread thrown away, handling like a timeout } } } @@ -126,10 +141,10 @@ public class IncomingDataBuffer { synchronized (cbb) { int pending = cbb.length(); if (pending > 0) { - logger.error("dropPending: Unexpected pending data: " + pending + " byte(s)"); + log.error("dropPending: Unexpected pending data: " + pending + " byte(s)"); byte[] bytes = new byte[pending]; cbb.get(bytes); - logger.error("data: " + Arrays.toString(bytes)); + log.error("data: " + Arrays.toString(bytes)); } } } @@ -163,31 +178,30 @@ public class IncomingDataBuffer { } public byte readByte(int timeoutMs) throws IOException { - boolean isTimeout = waitForBytes(timeoutMs,loggingPrefix + "readByte", System.currentTimeMillis(), 1); + boolean isTimeout = waitForBytes(timeoutMs, loggingPrefix + "readByte", System.currentTimeMillis(), 1); if (isTimeout) - throw new IOException("Timeout in readByte"); + throw new EOFException("Timeout in readByte " + timeoutMs); return (byte) getByte(); } public int readInt() throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "readInt", System.currentTimeMillis(), 4); if (isTimeout) - throw new IllegalStateException("Timeout in readByte"); + throw new EOFException("Timeout in readInt "); return swap32(getInt()); } public short readShort() throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "readShort", System.currentTimeMillis(), 2); if (isTimeout) - throw new IllegalStateException("Timeout in readShort"); + throw new EOFException("Timeout in readShort"); return (short) swap16(getShort()); } - public int read(byte[] packet) { + public void read(byte[] packet) throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "read", System.currentTimeMillis(), packet.length); if (isTimeout) - throw new IllegalStateException("Timeout while waiting " + packet.length); + throw new EOFException("Timeout while waiting " + packet.length); getData(packet); - return packet.length; } } diff --git a/java_console/io/src/main/java/com/rusefi/file/FileUtils.java b/java_console/io/src/main/java/com/rusefi/file/FileUtils.java index 7957e1bf4f..491d8a2055 100644 --- a/java_console/io/src/main/java/com/rusefi/file/FileUtils.java +++ b/java_console/io/src/main/java/com/rusefi/file/FileUtils.java @@ -1,6 +1,5 @@ package com.rusefi.file; -import com.opensr5.Logger; import com.rusefi.core.EngineState; import com.rusefi.io.LinkManager; @@ -12,8 +11,8 @@ import java.util.List; * Andrey Belomutskiy, (c) 2013-2020 */ public class FileUtils { - public static void readFile(String filename, EngineState.EngineStateListener listener, Logger logger) { - readFile2(filename, new EngineState(listener, logger)); + public static void readFile(String filename, EngineState.EngineStateListener listener) { + readFile2(filename, new EngineState(listener)); } public static void readFile2(String filename, EngineState engineState) { diff --git a/java_console/io/src/main/java/com/rusefi/io/AbstractConnectionStateListener.java b/java_console/io/src/main/java/com/rusefi/io/AbstractConnectionStateListener.java new file mode 100644 index 0000000000..b000d7997f --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/AbstractConnectionStateListener.java @@ -0,0 +1,11 @@ +package com.rusefi.io; + +public class AbstractConnectionStateListener implements ConnectionStateListener { + @Override + public void onConnectionEstablished() { + } + + @Override + public void onConnectionFailed() { + } +} diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index 4942d9a057..ffcffc67f3 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -1,39 +1,42 @@ package com.rusefi.io; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.opensr5.io.DataListener; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.serial.AbstractIoStream; +import com.rusefi.io.tcp.BinaryProtocolServer; import java.io.IOException; import java.util.Arrays; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import static com.devexperts.logging.Logging.getLogging; + public interface ByteReader { - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, Logger logger) { + Logging log = getLogging(ByteReader.class); + + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, AbstractIoStream ioStream) { /** * Threading of the whole input/output does not look healthy at all! * * @see #COMMUNICATION_EXECUTOR */ - Executor threadExecutor = Executors.newSingleThreadExecutor(r -> { - Thread t = new Thread(r, "IO executor thread"); - t.setDaemon(true); // need daemon thread so that COM thread is also daemon - return t; - }); + Executor threadExecutor = Executors.newSingleThreadExecutor(BinaryProtocolServer.getThreadFactory(loggingPrefix + "TCP reader")); threadExecutor.execute(() -> { - Thread.currentThread().setName("TCP connector loop"); - logger.info(loggingPrefix + "Running TCP connection loop"); + log.info(loggingPrefix + "Running TCP connection loop"); - byte inputBuffer[] = new byte[256]; - while (true) { + byte inputBuffer[] = new byte[Fields.BLOCKING_FACTOR * 2]; + while (!ioStream.isClosed()) { try { int result = reader.read(inputBuffer); if (result == -1) throw new IOException("TcpIoStream: End of input?"); listener.onDataArrived(Arrays.copyOf(inputBuffer, result)); } catch (IOException e) { - System.err.println("TcpIoStream: End of connection"); + log.error("TcpIoStream: End of connection " + e); + ioStream.close(); return; } } diff --git a/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java b/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java index cd419aafa8..7654cf1e57 100644 --- a/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java +++ b/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java @@ -1,6 +1,6 @@ package com.rusefi.io; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.config.generated.Fields; import com.rusefi.core.MessagesCentral; import org.jetbrains.annotations.NotNull; @@ -9,6 +9,8 @@ import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import static com.devexperts.logging.Logging.getLogging; + /** * This singleton keeps re-sending commands till a proper confirmation is received * @@ -18,6 +20,7 @@ import java.util.concurrent.LinkedBlockingQueue; */ @SuppressWarnings("FieldCanBeLocal") public class CommandQueue { + private static final Logging log = getLogging(LinkManager.class); public static final String CONFIRMATION_PREFIX = "confirmation_"; public static final int DEFAULT_TIMEOUT = 500; private static final int COMMAND_CONFIRMATION_TIMEOUT = 1000; @@ -36,7 +39,6 @@ public class CommandQueue { private final List commandListeners = new ArrayList<>(); private final Runnable runnable; - private final Logger logger; private static boolean isSlowCommand(String cmd) { String lc = cmd.toLowerCase(); @@ -98,27 +100,26 @@ public class CommandQueue { } if (counter != 1) - MessagesCentral.getInstance().postMessage(logger, CommandQueue.class, "Took " + counter + " attempts"); + MessagesCentral.getInstance().postMessage(CommandQueue.class, "Took " + counter + " attempts"); } - public CommandQueue(LinkManager linkManager, Logger logger) { + public CommandQueue(LinkManager linkManager) { this.linkManager = linkManager; runnable = new Runnable() { @SuppressWarnings("InfiniteLoopStatement") @Override public void run() { - MessagesCentral.getInstance().postMessage(logger, COMMAND_QUEUE_CLASS, "SerialIO started"); + MessagesCentral.getInstance().postMessage(COMMAND_QUEUE_CLASS, "SerialIO started"); while (true) { try { sendPendingCommand(); } catch (Throwable e) { - logger.error("CommandQueue error" + e); + log.error("CommandQueue error" + e); System.exit(-2); } } } }; - this.logger = logger; Thread thread = new Thread(runnable, "Commands Queue"); thread.setDaemon(true); thread.start(); @@ -136,10 +137,10 @@ public class CommandQueue { MessagesCentral mc = MessagesCentral.getInstance(); String confirmation = LinkManager.unpackConfirmation(message); if (confirmation == null) - mc.postMessage(logger, CommandQueue.class, "Broken confirmation length: " + message); + mc.postMessage(CommandQueue.class, "Broken confirmation length: " + message); pendingConfirmations.add(confirmation); if (LinkManager.LOG_LEVEL.isDebugEnabled()) - mc.postMessage(logger, CommandQueue.class, "got valid conf! " + confirmation + ", still pending: " + pendingCommands.size()); + mc.postMessage(CommandQueue.class, "got valid conf! " + confirmation + ", still pending: " + pendingCommands.size()); // FileLog.MAIN.logLine("templog got valid conf " + confirmation + " " + System.currentTimeMillis() + " " + new Date()); diff --git a/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java b/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java new file mode 100644 index 0000000000..e3c512b5f4 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java @@ -0,0 +1,5 @@ +package com.rusefi.io; + +public interface ConnectionFailedListener { + void onConnectionFailed(); +} diff --git a/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java b/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java index 7fd440ff3f..ab3010882c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java +++ b/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java @@ -4,21 +4,11 @@ package com.rusefi.io; * @author Andrey Belomutskiy * 3/1/2017 */ -public interface ConnectionStateListener { - ConnectionStateListener VOID = new ConnectionStateListener() { - @Override - public void onConnectionEstablished() { - } - - @Override - public void onConnectionFailed() { - } - }; +public interface ConnectionStateListener extends ConnectionFailedListener { + ConnectionStateListener VOID = new AbstractConnectionStateListener(); /** * This method is invoked once we have connection & configuration from controller */ void onConnectionEstablished(); - - void onConnectionFailed(); } diff --git a/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java b/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java index d8e7b0d7ba..e981f93d5c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java +++ b/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java @@ -1,16 +1,15 @@ package com.rusefi.io; -import com.opensr5.Logger; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; import java.io.IOException; public class DfuHelper { - public static void sendDfuRebootCommand(IoStream stream, StringBuilder messages, Logger logger) { + public static void sendDfuRebootCommand(IoStream stream, StringBuilder messages) { byte[] command = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT_DFU); try { - stream.sendPacket(command, logger); + stream.sendPacket(command); stream.close(); messages.append("Reboot command sent!\n"); } catch (IOException e) { diff --git a/java_console/io/src/main/java/com/rusefi/io/IoStream.java b/java_console/io/src/main/java/com/rusefi/io/IoStream.java index fdfc27ae8d..d49bb6cd3b 100644 --- a/java_console/io/src/main/java/com/rusefi/io/IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/IoStream.java @@ -1,6 +1,6 @@ package com.rusefi.io; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.opensr5.io.DataListener; import com.opensr5.io.WriteStream; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -10,9 +10,12 @@ import com.rusefi.io.serial.AbstractIoStream; import com.rusefi.io.tcp.BinaryProtocolServer; import org.jetbrains.annotations.NotNull; +import java.io.Closeable; import java.io.EOFException; import java.io.IOException; +import static com.devexperts.logging.Logging.getLogging; + /** * Physical bi-directional controller communication level *

@@ -20,7 +23,8 @@ import java.io.IOException; *

* 5/11/2015. */ -public interface IoStream extends WriteStream { +public interface IoStream extends WriteStream, Closeable { + Logging log = getLogging(IoStream.class); static String printHexBinary(byte[] data) { char[] hexCode = "0123456789ABCDEF".toCharArray(); @@ -44,9 +48,10 @@ public interface IoStream extends WriteStream { writeShort(packet.getPacket().length); write(packet.getPacket()); writeInt(packet.getCrc()); + flush(); } - default void sendPacket(byte[] plainPacket, Logger logger) throws IOException { + default void sendPacket(byte[] plainPacket) throws IOException { byte[] packet; if (BinaryProtocol.PLAIN_PROTOCOL) { packet = plainPacket; @@ -54,8 +59,9 @@ public interface IoStream extends WriteStream { packet = IoHelper.makeCrc32Packet(plainPacket); } // todo: verbose mode printHexBinary(plainPacket)) - logger.info(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length); + log.debug(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length); write(packet); + flush(); } /** diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java index a29be29bd1..afba623d37 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java @@ -1,7 +1,7 @@ package com.rusefi.io; +import com.devexperts.logging.Logging; import com.fazecast.jSerialComm.SerialPort; -import com.opensr5.Logger; import com.rusefi.Callable; import com.rusefi.NamedThreadFactory; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -19,6 +19,8 @@ import java.util.Arrays; import java.util.Objects; import java.util.concurrent.*; +import static com.devexperts.logging.Logging.getLogging; + /** * See TcpCommunicationIntegrationTest * @@ -26,6 +28,8 @@ import java.util.concurrent.*; * 3/3/14 */ public class LinkManager implements Closeable { + private static final Logging log = getLogging(LinkManager.class); + @NotNull public static LogLevel LOG_LEVEL = LogLevel.INFO; @@ -38,23 +42,21 @@ public class LinkManager implements Closeable { public static final String LOG_VIEWER = "log viewer"; private final CommandQueue commandQueue; - private final Logger logger; private LinkConnector connector; private boolean isStarted; private boolean compositeLogicEnabled = true; private boolean needPullData = true; - public LinkManager(Logger logger) { - this.logger = logger; + public LinkManager() { engineState = new EngineState(new EngineState.EngineStateListenerImpl() { @Override public void beforeLine(String fullLine) { - logger.info(fullLine); + log.info(fullLine); HeartBeatListeners.onDataArrived(); } - }, logger); - commandQueue = new CommandQueue(this, logger); + }); + commandQueue = new CommandQueue(this); } @NotNull @@ -194,9 +196,9 @@ public class LinkManager implements Closeable { return connector; } - public void start(String port, ConnectionStateListener stateListener) { + public void start(String port, ConnectionFailedListener stateListener) { Objects.requireNonNull(port, "port"); - logger.info("LinkManager: Starting " + port); + log.info("LinkManager: Starting " + port); if (isLogViewerMode(port)) { setConnector(LinkConnector.VOID); } else if (TcpConnector.isTcpPort(port)) { @@ -208,7 +210,7 @@ public class LinkManager implements Closeable { int portPart = TcpConnector.getTcpPort(port); String hostname = TcpConnector.getHostname(port); socket = new Socket(hostname, portPart); - TcpIoStream tcpIoStream = new TcpIoStream("[start] ", logger, socket); + TcpIoStream tcpIoStream = new TcpIoStream("[start] ", socket); return tcpIoStream; } catch (Throwable e) { @@ -218,13 +220,13 @@ public class LinkManager implements Closeable { } }; - setConnector(new StreamConnector(this, port, logger, streamFactory)); + setConnector(new StreamConnector(this, port, streamFactory)); isSimulationMode = true; } else { Callable ioStreamCallable = new Callable() { @Override public IoStream call() { - IoStream stream = ((Callable) () -> SerialIoStreamJSerialComm.openPort(port, logger)).call(); + IoStream stream = ((Callable) () -> SerialIoStreamJSerialComm.openPort(port)).call(); if (stream == null) { // error already reported return null; @@ -232,7 +234,7 @@ public class LinkManager implements Closeable { return stream; } }; - setConnector(new StreamConnector(this, port, logger, ioStreamCallable)); + setConnector(new StreamConnector(this, port, ioStreamCallable)); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java b/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java index fe2a52da3e..ba47d12e52 100644 --- a/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java +++ b/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java @@ -1,6 +1,10 @@ package com.rusefi.io.commands; import com.rusefi.config.generated.Fields; +import com.rusefi.io.IoStream; +import com.rusefi.io.tcp.BinaryProtocolServer; + +import java.io.IOException; import static com.rusefi.binaryprotocol.IoHelper.putShort; import static com.rusefi.binaryprotocol.IoHelper.swap16; @@ -13,4 +17,10 @@ public class GetOutputsCommand { putShort(packet, 3, swap16(Fields.TS_OUTPUT_SIZE)); return packet; } + + public static void sendOutput(IoStream stream) throws IOException { + byte[] response = new byte[1 + Fields.TS_OUTPUT_SIZE]; + response[0] = (byte) BinaryProtocolServer.TS_OK.charAt(0); + stream.sendPacket(response); + } } diff --git a/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java b/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java index d058fbdd2b..912db1e84c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java +++ b/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java @@ -1,6 +1,5 @@ package com.rusefi.io.commands; -import com.opensr5.Logger; import com.rusefi.binaryprotocol.BinaryProtocolCommands; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; @@ -14,21 +13,19 @@ import java.io.IOException; import static com.rusefi.binaryprotocol.IoHelper.checkResponseCode; public class HelloCommand implements Command { - private final Logger logger; private final String tsSignature; - public HelloCommand(Logger logger, String tsSignature) { - this.logger = logger; + public HelloCommand(String tsSignature) { this.tsSignature = tsSignature; } - public static void send(IoStream stream, Logger logger) throws IOException { - stream.sendPacket(new byte[]{Fields.TS_HELLO_COMMAND}, logger); + public static void send(IoStream stream) throws IOException { + stream.sendPacket(new byte[]{Fields.TS_HELLO_COMMAND}); } @Nullable - public static String getHelloResponse(IncomingDataBuffer incomingData, Logger logger) throws EOFException { - byte[] response = incomingData.getPacket(logger, "[hello]", false); + public static String getHelloResponse(IncomingDataBuffer incomingData) throws EOFException { + byte[] response = incomingData.getPacket("[hello]", false); if (!checkResponseCode(response, BinaryProtocolCommands.RESPONSE_OK)) return null; return new String(response, 1, response.length - 1); @@ -41,6 +38,6 @@ public class HelloCommand implements Command { @Override public void handle(IoStream stream) throws IOException { - stream.sendPacket((BinaryProtocolServer.TS_OK + tsSignature).getBytes(), logger); + stream.sendPacket((BinaryProtocolServer.TS_OK + tsSignature).getBytes()); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java index 4dd56f039f..78bdac9d59 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java @@ -2,6 +2,8 @@ package com.rusefi.io.serial; import com.rusefi.io.IoStream; +import java.io.IOException; + public abstract class AbstractIoStream implements IoStream { private boolean isClosed; @@ -17,6 +19,10 @@ public abstract class AbstractIoStream implements IoStream { isClosed = true; } + @Override + public void flush() throws IOException { + } + @Override public boolean isClosed() { return isClosed; diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java index c2accd98b3..3434bc88eb 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java @@ -1,6 +1,6 @@ package com.rusefi.io.serial; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.MessagesCentral; @@ -13,6 +13,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; +import static com.devexperts.logging.Logging.getLogging; + /** * This class holds the reference to the actual Serial port object *

@@ -20,8 +22,9 @@ import java.awt.*; * Andrey Belomutskiy, (c) 2013-2020 */ public class PortHolder { + private static final Logging log = getLogging(PortHolder.class); + private final DataListener dataListener; - private final Logger logger; private final Callable ioStreamCallable; private final LinkManager linkManager; @@ -32,11 +35,10 @@ public class PortHolder { @Nullable private BinaryProtocol bp; - protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable ioStreamCallable) { + protected PortHolder(String port, LinkManager linkManager, Callable ioStreamCallable) { this.port = port; this.linkManager = linkManager; dataListener = freshData -> linkManager.getEngineState().processNewData(new String(freshData), LinkManager.ENCODER); - this.logger = logger; this.ioStreamCallable = ioStreamCallable; } @@ -44,7 +46,7 @@ public class PortHolder { if (port == null) return false; - MessagesCentral.getInstance().postMessage(logger, getClass(), "Opening port: " + port); + MessagesCentral.getInstance().postMessage(getClass(), "Opening port: " + port); IoStream stream = ioStreamCallable.call(); if (stream == null) { @@ -52,7 +54,7 @@ public class PortHolder { return false; } synchronized (portLock) { - bp = new BinaryProtocol(linkManager, logger, stream, stream.getDataBuffer()); + bp = new BinaryProtocol(linkManager, stream, stream.getDataBuffer()); portLock.notifyAll(); } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java index 76b8e3135a..1eaf662f99 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java @@ -1,13 +1,15 @@ package com.rusefi.io.serial; +import com.devexperts.logging.Logging; import com.fazecast.jSerialComm.SerialPort; import com.fazecast.jSerialComm.SerialPortDataListener; import com.fazecast.jSerialComm.SerialPortEvent; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; +import static com.devexperts.logging.Logging.getLogging; + /** * https://github.com/Fazecast/jSerialComm looks to be alive as of 2020 *

@@ -15,19 +17,18 @@ import com.rusefi.io.IoStream; * 06/03/2019 */ public class SerialIoStreamJSerialComm extends AbstractIoStream { + private static final Logging log = getLogging(SerialIoStreamJSerialComm.class); private SerialPort sp; private final String port; - private final Logger logger; private final IncomingDataBuffer dataBuffer; /** - * @see #openPort(String, Logger) + * @see #openPort(String) */ - private SerialIoStreamJSerialComm(SerialPort sp, String port, Logger logger) { + private SerialIoStreamJSerialComm(SerialPort sp, String port) { this.sp = sp; this.port = port; - this.logger = logger; - this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this, logger); + this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this); } @Override @@ -38,6 +39,8 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { sp.addDataListener(new SerialPortDataListener() { + private boolean isFirstEvent = true; + @Override public int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; @@ -47,6 +50,11 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { public void serialEvent(SerialPortEvent event) { if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE) return; + if (isFirstEvent) { + // a hack to have explicit thread name, see https://github.com/Fazecast/jSerialComm/issues/308 + Thread.currentThread().setName("Serial Port Event Thread"); + isFirstEvent = false; + } int bytesAvailable = sp.bytesAvailable(); if (bytesAvailable <= 0) return; // sometimes negative value is returned at least on Mac @@ -68,10 +76,10 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { @Override public void close() { - logger.info(port + ": Closing port..."); + log.info(port + ": Closing port..."); super.close(); sp.closePort(); - logger.info(port + ": Closed port."); + log.info(port + ": Closed port."); } @Override @@ -83,12 +91,12 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { * Just open physical serial and not much more * @see PortHolder#connectAndReadConfiguration() */ - public static IoStream openPort(String port, Logger logger) { - logger.info("[SerialIoStreamJSerialComm] openPort " + port); + public static IoStream openPort(String port) { + log.info("[SerialIoStreamJSerialComm] openPort " + port); SerialPort serialPort = SerialPort.getCommPort(port); serialPort.setBaudRate(BaudRateHolder.INSTANCE.baudRate); serialPort.openPort(0); // FileLog.LOGGER.info("[SerialIoStreamJSerialComm] opened " + port); - return new SerialIoStreamJSerialComm(serialPort, port, logger); + return new SerialIoStreamJSerialComm(serialPort, port); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java index fc3e71700d..ae0c2c0d10 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java @@ -1,6 +1,6 @@ package com.rusefi.io.serial; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.MessagesCentral; @@ -9,34 +9,32 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkConnector; import com.rusefi.io.LinkManager; +import static com.devexperts.logging.Logging.getLogging; + /** * @author Andrey Belomutskiy * 3/3/14 */ public class StreamConnector implements LinkConnector { + private static final Logging log = getLogging(StreamConnector.class); private final PortHolder portHolder; - private final Logger logger; private final LinkManager linkManager; - public StreamConnector(LinkManager linkManager, String portName, Logger logger, Callable ioStreamCallable) { + public StreamConnector(LinkManager linkManager, String portName, Callable ioStreamCallable) { this.linkManager = linkManager; - this.logger = logger; - portHolder = new PortHolder(portName, linkManager, logger, ioStreamCallable); + portHolder = new PortHolder(portName, linkManager, ioStreamCallable); } @Override public void connectAndReadConfiguration(ConnectionStateListener listener) { - logger.info("StreamConnector: connecting"); + log.info("StreamConnector: connecting"); portHolder.listener = listener; - logger.info("scheduleOpening"); - linkManager.execute(new Runnable() { - @Override - public void run() { - logger.info("scheduleOpening>openPort"); - portHolder.connectAndReadConfiguration(); - } + log.info("scheduleOpening"); + linkManager.execute(() -> { + log.info("scheduleOpening>openPort"); + portHolder.connectAndReadConfiguration(); }); } @@ -52,13 +50,10 @@ public class StreamConnector implements LinkConnector { @Override public void restart() { - linkManager.execute(new Runnable() { - @Override - public void run() { - MessagesCentral.getInstance().postMessage(logger, StreamConnector.this.getClass(), "Restarting serial IO"); - portHolder.close(); - portHolder.connectAndReadConfiguration(); - } + linkManager.execute(() -> { + MessagesCentral.getInstance().postMessage(StreamConnector.this.getClass(), "Restarting serial IO"); + portHolder.close(); + portHolder.connectAndReadConfiguration(); }); } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index 7cbaac625d..cdcaae1d0f 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -1,73 +1,90 @@ package com.rusefi.io.tcp; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; +import com.rusefi.Listener; +import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; +import org.jetbrains.annotations.NotNull; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.Socket; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; +import static com.rusefi.shared.FileUtil.close; public class BinaryProtocolProxy { - public static void createProxy(Logger logger, IoStream targetEcuSocket, int serverProxyPort) { - Function clientSocketRunnableFactory = new Function() { - @Override - public Runnable apply(Socket clientSocket) { - return new Runnable() { - @Override - public void run() { - try { - TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", logger, clientSocket); - runProxy(targetEcuSocket, clientStream); - } catch (IOException e) { - logger.error("BinaryProtocolProxy::run" + e); - } - } - }; + private static final Logging log = getLogging(BinaryProtocolProxy.class); + /** + * we expect server to at least request output channels once in a while + * it could be a while between user connecting authenticator and actually connecting application to authenticator + * See Backend#APPLICATION_INACTIVITY_TIMEOUT + */ + public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; + + public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) throws IOException { + Function clientSocketRunnableFactory = clientSocket -> () -> { + TcpIoStream clientStream = null; + try { + clientStream = new TcpIoStream("[[proxy]] ", clientSocket); + runProxy(targetEcuSocket, clientStream, relayCommandCounter); + } catch (IOException e) { + log.error("BinaryProtocolProxy::run " + e); + close(clientStream); } }; - BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); + return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Listener.empty()); } - public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { + public static void runProxy(IoStream targetEcu, IoStream clientStream, AtomicInteger relayCommandCounter) throws IOException { /* * Each client socket is running on it's own thread */ - while (true) { - byte firstByte = clientStream.getDataBuffer().readByte(); + while (!targetEcu.isClosed()) { + byte firstByte = clientStream.getDataBuffer().readByte(USER_IO_TIMEOUT); if (firstByte == COMMAND_PROTOCOL) { clientStream.write(TS_PROTOCOL.getBytes()); continue; } - proxyClientRequestToController(clientStream.getDataBuffer(), firstByte, targetEcu); + BinaryProtocolServer.Packet clientRequest = readClientRequest(clientStream.getDataBuffer(), firstByte); - proxyControllerResponseToClient(targetEcu, clientStream); + /** + * Two reasons for synchronization: + * - we run gauge poking thread until TunerStudio connects + * - technically there could be two parallel connections to local application port + */ + BinaryProtocolServer.Packet controllerResponse; + synchronized (targetEcu) { + sendToTarget(targetEcu, clientRequest); + controllerResponse = targetEcu.readPacket(); + relayCommandCounter.incrementAndGet(); + } + + log.info("Relaying controller response length=" + controllerResponse.getPacket().length); + clientStream.sendPacket(controllerResponse); } } - public static void proxyControllerResponseToClient(IoStream targetInputStream, IoStream clientOutputStream) throws IOException { - BinaryProtocolServer.Packet packet = targetInputStream.readPacket(); - - System.out.println("Relaying controller response length=" + packet.getPacket().length); - clientOutputStream.sendPacket(packet); - } - - private static void proxyClientRequestToController(IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { + @NotNull + private static BinaryProtocolServer.Packet readClientRequest(IncomingDataBuffer in, byte firstByte) throws IOException { byte secondByte = in.readByte(); int length = firstByte * 256 + secondByte; - BinaryProtocolServer.Packet packet = BinaryProtocolServer.readPromisedBytes(in, length); + return BinaryProtocolServer.readPromisedBytes(in, length); + } + private static void sendToTarget(IoStream targetOutputStream, BinaryProtocolServer.Packet packet) throws IOException { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(packet.getPacket())); byte command = (byte) dis.read(); - System.out.println("Relaying client command " + BinaryProtocol.findCommand(command)); + log.info("Relaying client command " + BinaryProtocol.findCommand(command)); // sending proxied packet to controller targetOutputStream.sendPacket(packet); } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 910340293c..4e211c9317 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -1,8 +1,9 @@ package com.rusefi.io.tcp; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; import com.rusefi.Listener; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.*; import com.rusefi.config.generated.Fields; @@ -10,15 +11,19 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; import com.rusefi.io.commands.HelloCommand; import com.rusefi.server.rusEFISSLContext; +import org.jetbrains.annotations.NotNull; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.swap16; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_RESPONSE_BURN_OK; @@ -32,45 +37,42 @@ import static com.rusefi.config.generated.Fields.TS_RESPONSE_BURN_OK; */ public class BinaryProtocolServer implements BinaryProtocolCommands { + private static final Logging log = getLogging(BinaryProtocolServer.class); private static final int DEFAULT_PROXY_PORT = 2390; public static final String TS_OK = "\0"; - private final Logger logger; public AtomicInteger unknownCommands = new AtomicInteger(); - public static final Function SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket; + public static final ServerSocketFunction SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket; - public static final Function PLAIN_SOCKET_FACTORY = port -> { - try { - ServerSocket serverSocket = new ServerSocket(port); - Logger.CONSOLE.info("ServerSocket " + port + " created"); - return serverSocket; - } catch (IOException e) { - throw new IllegalStateException("Error binding server socket " + port, e); - } + public static final ServerSocketFunction PLAIN_SOCKET_FACTORY = port -> { + ServerSocket serverSocket = new ServerSocket(port); + log.info("ServerSocket " + port + " created"); + return serverSocket; }; - - public BinaryProtocolServer(Logger logger) { - this.logger = logger; - } + private static ConcurrentHashMap THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>(); public void start(LinkManager linkManager) { - start(linkManager, DEFAULT_PROXY_PORT, null); + try { + start(linkManager, DEFAULT_PROXY_PORT, Listener.empty(), new Context()); + } catch (IOException e) { + log.error("Error starting local proxy", e); + } } - public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) { - logger.info("BinaryProtocolServer on " + port); + public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) throws IOException { + log.info("BinaryProtocolServer on " + port); Function clientSocketRunnableFactory = clientSocket -> () -> { try { - runProxy(linkManager, clientSocket); + runProxy(linkManager, clientSocket, context); } catch (IOException e) { - logger.info("proxy connection: " + e); + log.info("proxy connection: " + e); } }; - tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger, serverSocketCreationCallback); + tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, serverSocketCreationCallback); } /** @@ -79,35 +81,48 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { * @param port server port to accept connections * @param threadName * @param socketRunnableFactory method to invoke on a new thread for each new client connection - * @param logger * @param serverSocketCreationCallback this callback is invoked once we open the server socket + * @return */ - public static void tcpServerSocket(int port, String threadName, Function socketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) { - tcpServerSocket(logger, socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); + public static ServerSocketReference tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) throws IOException { + return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static void tcpServerSocket(Logger logger, Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, ServerSocketFunction nonSecureSocketFunction) throws IOException { + ThreadFactory threadFactory = getThreadFactory(threadName); + + Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); ServerSocket serverSocket = nonSecureSocketFunction.apply(port); - if (serverSocketCreationCallback != null) - serverSocketCreationCallback.onResult(null); + + ServerSocketReference holder = new ServerSocketReference(serverSocket); + + serverSocketCreationCallback.onResult(null); Runnable runnable = () -> { - try { - while (true) { - // Wait for a connection - final Socket clientSocket = serverSocket.accept(); - logger.info("Binary protocol proxy port connection"); - new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start(); + while (!holder.isClosed()) { + // Wait for a connection + final Socket clientSocket; + try { + clientSocket = serverSocket.accept(); + } catch (IOException e) { + log.info("Client socket closed right away " + e); + continue; } - } catch (IOException e) { - throw new IllegalStateException(e); + log.info("Accepting binary protocol proxy port connection on " + port); + threadFactory.newThread(clientSocketRunnableFactory.apply(clientSocket)).start(); } }; - new Thread(runnable, threadName).start(); + threadFactory.newThread(runnable).start(); + return holder; + } + + @NotNull + public static ThreadFactory getThreadFactory(String threadName) { + return THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new); } @SuppressWarnings("InfiniteLoopStatement") - private void runProxy(LinkManager linkManager, Socket clientSocket) throws IOException { - TcpIoStream stream = new TcpIoStream("[proxy] ", logger, clientSocket); + private void runProxy(LinkManager linkManager, Socket clientSocket, Context context) throws IOException { + TcpIoStream stream = new TcpIoStream("[proxy] ", clientSocket); IncomingDataBuffer in = stream.getDataBuffer(); @@ -118,12 +133,13 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { handled.set(true); }; - int length = getPacketLength(in, protocolCommandHandler); + int length = getPacketLength(in, protocolCommandHandler, context.getTimeout()); if (handled.get()) { continue; } - System.out.println("Got [" + length + "] length promise"); + if (log.debugEnabled()) + log.debug("Got [" + length + "] length promise"); Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); @@ -133,19 +149,18 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { byte command = payload[0]; - System.out.println("Got command " + BinaryProtocol.findCommand(command)); + log.info("Got command " + BinaryProtocol.findCommand(command)); if (command == Fields.TS_HELLO_COMMAND) { - new HelloCommand(logger, Fields.TS_SIGNATURE).handle(stream); + new HelloCommand(Fields.TS_SIGNATURE).handle(stream); } else if (command == COMMAND_PROTOCOL) { -// System.out.println("Ignoring crc F command"); - stream.sendPacket((TS_OK + TS_PROTOCOL).getBytes(), logger); + stream.sendPacket((TS_OK + TS_PROTOCOL).getBytes()); } else if (command == Fields.TS_GET_FIRMWARE_VERSION) { - stream.sendPacket((TS_OK + "rusEFI proxy").getBytes(), logger); + stream.sendPacket((TS_OK + "rusEFI proxy").getBytes()); } else if (command == COMMAND_CRC_CHECK_COMMAND) { handleCrc(linkManager, stream); } else if (command == COMMAND_PAGE) { - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else if (command == COMMAND_READ) { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); handleRead(linkManager, dis, stream); @@ -153,16 +168,16 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); handleWrite(linkManager, payload, dis, stream); } else if (command == Fields.TS_BURN_COMMAND) { - stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}, logger); + stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}); } else if (command == Fields.TS_GET_COMPOSITE_BUFFER_DONE_DIFFERENTLY) { System.err.println("NOT IMPLEMENTED TS_GET_COMPOSITE_BUFFER_DONE_DIFFERENTLY relay"); // todo: relay command - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else if (command == Fields.TS_OUTPUT_COMMAND) { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); - logger.info("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count); + log.info("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count); byte[] response = new byte[1 + count]; response[0] = (byte) TS_OK.charAt(0); @@ -170,15 +185,15 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { byte[] currentOutputs = binaryProtocolState.getCurrentOutputs(); if (currentOutputs != null) System.arraycopy(currentOutputs, 1 + offset, response, 1, count); - stream.sendPacket(response, logger); + stream.sendPacket(response); } else if (command == Fields.TS_GET_TEXT) { // todo: relay command System.err.println("NOT IMPLEMENTED TS_GET_TEXT relay"); - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else { unknownCommands.incrementAndGet(); new IllegalStateException().printStackTrace(); - logger.info("Error: unexpected " + BinaryProtocol.findCommand(command)); + log.info("Error: unexpected " + BinaryProtocol.findCommand(command)); } } } @@ -212,13 +227,12 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { if (length <= 0) throw new IOException("Unexpected packed length " + length); byte[] packet = new byte[length]; - int size = in.read(packet); - if (size != packet.length) - throw new IllegalStateException(size + " promised but " + packet.length + " arrived"); + in.read(packet); int crc = in.readInt(); int fromPacket = IoHelper.getCrc32(packet); if (crc != fromPacket) throw new IllegalStateException("CRC mismatch crc=" + Integer.toString(crc, 16) + " vs packet=" + Integer.toString(fromPacket, 16) + " len=" + packet.length + " data: " + IoStream.printHexBinary(packet)); + in.onPacketArrived(); return new Packet(packet, crc); } @@ -227,7 +241,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } public static void handleProtocolCommand(Socket clientSocket) throws IOException { - System.out.println("Got plain F command"); + log.info("Got plain F command"); OutputStream outputStream = clientSocket.getOutputStream(); outputStream.write(TS_PROTOCOL.getBytes()); outputStream.flush(); @@ -237,10 +251,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { dis.readShort(); // page int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); - logger.info("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count); + log.info("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); bp.setRange(packet, 7, offset, count); - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } private void handleRead(LinkManager linkManager, DataInputStream dis, TcpIoStream stream) throws IOException { @@ -248,9 +262,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); if (count <= 0) { - logger.info("Error: negative read request " + offset + "/" + count); + log.info("Error: negative read request " + offset + "/" + count); } else { - System.out.println("read " + page + "/" + offset + "/" + count); + if (log.debugEnabled()) + log.debug("read " + page + "/" + offset + "/" + count); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); byte[] response = new byte[1 + count]; response[0] = (byte) TS_OK.charAt(0); @@ -258,19 +273,19 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { ConfigurationImage configurationImage = bp.getControllerConfiguration(); Objects.requireNonNull(configurationImage, "configurationImage"); System.arraycopy(configurationImage.getContent(), offset, response, 1, count); - stream.sendPacket(response, logger); + stream.sendPacket(response); } } private void handleCrc(LinkManager linkManager, TcpIoStream stream) throws IOException { - System.out.println("CRC check"); + log.info("CRC check"); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); byte[] content = bp.getControllerConfiguration().getContent(); int result = IoHelper.getCrc32(content); ByteArrayOutputStream response = new ByteArrayOutputStream(); response.write(TS_OK.charAt(0)); new DataOutputStream(response).writeInt(result); - stream.sendPacket(response.toByteArray(), logger); + stream.sendPacket(response.toByteArray()); } public static class Packet { @@ -290,4 +305,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { return crc; } } + + public static class Context { + public int getTimeout() { + return Timeouts.BINARY_IO_TIMEOUT; + } + } } \ No newline at end of file diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java new file mode 100644 index 0000000000..9297af2e75 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java @@ -0,0 +1,8 @@ +package com.rusefi.io.tcp; + +import java.io.IOException; +import java.net.ServerSocket; + +public interface ServerSocketFunction { + ServerSocket apply(int port) throws IOException; +} diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java new file mode 100644 index 0000000000..caac6887f8 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java @@ -0,0 +1,25 @@ +package com.rusefi.io.tcp; + +import com.rusefi.shared.FileUtil; + +import java.io.Closeable; +import java.net.ServerSocket; + +public class ServerSocketReference implements Closeable { + private final ServerSocket serverSocket; + private boolean isClosed; + + public ServerSocketReference(ServerSocket serverSocket) { + this.serverSocket = serverSocket; + } + + @Override + public void close() { + isClosed = true; + FileUtil.close(serverSocket); + } + + public boolean isClosed() { + return isClosed; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index fbea5e9430..b97f804815 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -1,6 +1,5 @@ package com.rusefi.io.tcp; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.ByteReader; @@ -8,10 +7,7 @@ import com.rusefi.io.serial.AbstractIoStream; import com.rusefi.shared.FileUtil; import org.jetbrains.annotations.NotNull; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; /** @@ -21,34 +17,37 @@ import java.net.Socket; public class TcpIoStream extends AbstractIoStream { private final InputStream input; private final OutputStream output; - private final Logger logger; private final String loggingPrefix; + private final DisconnectListener disconnectListener; @NotNull private final Socket socket; private final IncomingDataBuffer dataBuffer; - public TcpIoStream(Logger logger, Socket socket) throws IOException { - this("", logger, socket); + public TcpIoStream(String loggingPrefix, Socket socket) throws IOException { + this(loggingPrefix, socket, DisconnectListener.VOID); } - public TcpIoStream(String loggingPrefix, Logger logger, Socket socket) throws IOException { + public TcpIoStream(String loggingPrefix, Socket socket, DisconnectListener disconnectListener) throws IOException { this.loggingPrefix = loggingPrefix; + this.disconnectListener = disconnectListener; if (socket == null) throw new NullPointerException("socket"); this.socket = socket; InputStream input = new BufferedInputStream(socket.getInputStream()); - OutputStream output = socket.getOutputStream(); - this.logger = logger; - if (output == null) - throw new NullPointerException("output"); - this.output = output; + this.output = new BufferedOutputStream(socket.getOutputStream()); this.input = input; - this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this, logger); + this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this); } @Override public void close() { - super.close(); + // we need to guarantee only one onDisconnect invocation for retry logic to be healthy + synchronized (this) { + if (!isClosed()) { + super.close(); + disconnectListener.onDisconnect("on close"); + } + } FileUtil.close(socket); } @@ -65,12 +64,23 @@ public class TcpIoStream extends AbstractIoStream { @Override public void write(byte[] bytes) throws IOException { output.write(bytes); + } + + @Override + public void flush() throws IOException { + super.flush(); output.flush(); } @Override public void setInputListener(final DataListener listener) { + ByteReader.runReaderLoop(loggingPrefix, listener, input::read, this); + } - ByteReader.runReaderLoop(loggingPrefix, listener, input::read, logger); + public interface DisconnectListener { + DisconnectListener VOID = (String message) -> { + + }; + void onDisconnect(String message); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java similarity index 51% rename from java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java rename to java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index 4806b7fc7b..85776cf00c 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -1,8 +1,7 @@ package com.rusefi.proxy; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; -import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; import com.rusefi.io.commands.HelloCommand; @@ -13,41 +12,53 @@ import com.rusefi.server.SessionDetails; import java.io.IOException; import java.net.Socket; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.io.tcp.BinaryProtocolServer.getPacketLength; import static com.rusefi.io.tcp.BinaryProtocolServer.readPromisedBytes; +import static com.rusefi.shared.FileUtil.close; public class BaseBroadcastingThread { - private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("BaseBroadcastingThread"); - // we expect server to at least request output channels once in a while - private static final int IO_TIMEOUT = 600 * Timeouts.SECOND; + private static final Logging log = getLogging(BaseBroadcastingThread.class); + private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("network connector"); private final Thread thread; @SuppressWarnings("InfiniteLoopStatement") - public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, Logger logger) throws IOException { - TcpIoStream stream = new TcpIoStream("[broadcast] ", logger, socket); - IncomingDataBuffer in = stream.getDataBuffer(); - + public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, TcpIoStream.DisconnectListener disconnectListener, NetworkConnectorContext context) { thread = BASE_BROADCASTING_THREAD.newThread(() -> { + TcpIoStream stream = null; try { + stream = new TcpIoStream("[network connector] ", socket, disconnectListener); + IncomingDataBuffer in = stream.getDataBuffer(); + boolean isFirstHello = true; while (true) { + int ioTimeout; + if (isFirstHello) { + log.info("Waiting for proxy server to request session details"); + ioTimeout = context.firstPacketTimeout(); + } else { + ioTimeout = context.consecutivePacketTimeout(); + } int length = getPacketLength(in, () -> { throw new UnsupportedOperationException(); - }, IO_TIMEOUT); + }, ioTimeout); BinaryProtocolServer.Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); byte command = payload[0]; - if (command == Fields.TS_HELLO_COMMAND) { + if (isFirstHello && command == Fields.TS_HELLO_COMMAND) { + // first TS_HELLO_COMMAND is PROXY request, consecutive TS_HELLO_COMMAND would be real deal from user desktop application + isFirstHello = false; // respond on hello request with information about session - logger.info("Sending to controller connector@proxy: " + sessionDetails); - new HelloCommand(logger, sessionDetails.toJson()).handle(stream); + log.info("Replying to controller connector@proxy: " + sessionDetails); + new HelloCommand(sessionDetails.toJson()).handle(stream); } else { handleCommand(packet, stream); } } } catch (IOException e) { - logger.error("exiting thread " + e); + log.error("exiting thread " + e); + close(stream); } }); } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java new file mode 100644 index 0000000000..0c8024d606 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -0,0 +1,182 @@ +package com.rusefi.proxy; + +import com.devexperts.logging.Logging; +import com.opensr5.ConfigurationImage; +import com.rusefi.Timeouts; +import com.rusefi.binaryprotocol.BinaryProtocol; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.AbstractConnectionStateListener; +import com.rusefi.io.IoStream; +import com.rusefi.io.LinkManager; +import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.server.ControllerInfo; +import com.rusefi.server.SessionDetails; +import com.rusefi.server.rusEFISSLContext; +import com.rusefi.tools.online.HttpUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.Closeable; +import java.io.IOException; +import java.net.Socket; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; + +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; + +/** + * Connector between rusEFI ECU and rusEFI server + * see NetworkConnectorStartup + */ +public class NetworkConnector implements Closeable { + private final static Logging log = Logging.getLogging(NetworkConnector.class); + private boolean isClosed; + + public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context) { + return start(authToken, controllerPort, context, ReconnectListener.VOID); + } + + public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { + LinkManager controllerConnector = new LinkManager() + .setCompositeLogicEnabled(false) + .setNeedPullData(false); + + CountDownLatch onConnected = new CountDownLatch(1); + controllerConnector.startAndConnect(controllerPort, new AbstractConnectionStateListener() { + @Override + public void onConnectionEstablished() { + onConnected.countDown(); + } + }); + + log.info("Connecting to controller..."); + try { + onConnected.await(1, TimeUnit.MINUTES); + } catch (InterruptedException e) { + throw new IllegalStateException(e); + } + if (onConnected.getCount() != 0) { + log.info("Connection to controller failed"); + return NetworkConnectorResult.ERROR; + } + + ControllerInfo controllerInfo; + try { + controllerInfo = getControllerInfo(controllerConnector, controllerConnector.getConnector().getBinaryProtocol().getStream()); + } catch (IOException e) { + return NetworkConnectorResult.ERROR; + } + + int oneTimeToken = SessionDetails.createOneTimeCode(); + + BinaryProtocolServer.getThreadFactory("Proxy Reconnect").newThread(() -> { + Semaphore proxyReconnectSemaphore = new Semaphore(1); + try { + while (!isClosed) { + proxyReconnectSemaphore.acquire(); + + try { + start(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { + log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); + sleep(context.reconnectDelay() * Timeouts.SECOND); + log.debug("Releasing semaphore"); + proxyReconnectSemaphore.release(); + reconnectListener.onReconnect(); + }, oneTimeToken, controllerInfo, context); + } catch (IOException e) { + log.error("IO error", e); + } + } + } catch (InterruptedException e) { + throw new IllegalStateException(e); + } + }).start(); + + return new NetworkConnectorResult(controllerInfo, oneTimeToken); + } + + @NotNull + private static SessionDetails start(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { + IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); + + SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); + + Socket socket; + try { + log.info("Connecting to proxy server " + HttpUtil.RUSEFI_PROXY_HOSTNAME + " " + serverPortForControllers); + socket = rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers); + } catch (IOException e) { + // socket open exception is a special case and should be handled separately + disconnectListener.onDisconnect("on socket open"); + return deviceSessionDetails; + } + BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, + deviceSessionDetails, + disconnectListener, context) { + @Override + protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { + super.handleCommand(packet, stream); + log.info("Relaying request to controller " + BinaryProtocol.findCommand(packet.getPacket()[0])); + targetEcuSocket.sendPacket(packet); + + BinaryProtocolServer.Packet response = targetEcuSocket.readPacket(); + log.info("Relaying response to proxy size=" + response.getPacket().length); + stream.sendPacket(response); + } + }; + baseBroadcastingThread.start(); + return deviceSessionDetails; + } + + @NotNull + private static ControllerInfo getControllerInfo(LinkManager linkManager, IoStream targetEcuSocket) throws IOException { + HelloCommand.send(targetEcuSocket); + String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer()); + if (helloResponse == null) + throw new IOException("Error getting hello response"); + String controllerSignature = helloResponse.trim(); + + ConfigurationImage image = linkManager.getConnector().getBinaryProtocol().getControllerConfiguration(); + String vehicleName = Fields.VEHICLENAME.getStringValue(image); + String engineMake = Fields.ENGINEMAKE.getStringValue(image); + String engineCode = Fields.ENGINECODE.getStringValue(image); + return new ControllerInfo(vehicleName, engineMake, engineCode, controllerSignature); + } + + @Override + public void close() { + isClosed = true; + } + + public static class NetworkConnectorResult { + static NetworkConnectorResult ERROR = new NetworkConnectorResult(null, 0); + private final ControllerInfo controllerInfo; + private final int oneTimeToken; + + public NetworkConnectorResult(ControllerInfo controllerInfo, int oneTimeToken) { + this.controllerInfo = controllerInfo; + this.oneTimeToken = oneTimeToken; + } + + public ControllerInfo getControllerInfo() { + return controllerInfo; + } + + public int getOneTimeToken() { + return oneTimeToken; + } + } + + public interface ReconnectListener { + ReconnectListener VOID = new ReconnectListener() { + @Override + public void onReconnect() { + + } + }; + void onReconnect(); + } + +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java new file mode 100644 index 0000000000..5336f4758c --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java @@ -0,0 +1,23 @@ +package com.rusefi.proxy; + +import com.rusefi.Timeouts; +import com.rusefi.io.tcp.BinaryProtocolProxy; +import com.rusefi.tools.online.ProxyClient; + +public class NetworkConnectorContext { + public int reconnectDelay() { + return 15; // this one is seconds + } + + public int firstPacketTimeout() { + return Timeouts.CMD_TIMEOUT; + } + + public int consecutivePacketTimeout() { + return BinaryProtocolProxy.USER_IO_TIMEOUT; + } + + public int serverPortForControllers() { + return ProxyClient.SERVER_PORT_FOR_CONTROLLERS; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java new file mode 100644 index 0000000000..40839a3e98 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -0,0 +1,120 @@ +package com.rusefi.proxy.client; + +import com.devexperts.logging.Logging; +import com.rusefi.NamedThreadFactory; +import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; +import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolProxy; +import com.rusefi.io.tcp.ServerSocketReference; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.server.ApplicationRequest; +import com.rusefi.server.rusEFISSLContext; +import com.rusefi.tools.online.HttpUtil; +import com.rusefi.tools.online.ProxyClient; + +import java.io.Closeable; +import java.io.IOException; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +import static com.devexperts.logging.Logging.getLogging; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; + +public class LocalApplicationProxy implements Closeable { + private static final ThreadFactory THREAD_FACTORY = new NamedThreadFactory("gauge poking"); + private static final Logging log = getLogging(LocalApplicationProxy.class); + public static final int SERVER_PORT_FOR_APPLICATIONS = HttpUtil.getIntProperty("applications.port", 8002); + private final ApplicationRequest applicationRequest; + private final ServerSocketReference serverHolder; + private final IoStream authenticatorToProxyStream; + + public LocalApplicationProxy(ApplicationRequest applicationRequest, ServerSocketReference serverHolder, IoStream authenticatorToProxyStream) { + this.applicationRequest = applicationRequest; + this.serverHolder = serverHolder; + this.authenticatorToProxyStream = authenticatorToProxyStream; + } + + public ApplicationRequest getApplicationRequest() { + return applicationRequest; + } + + /** + * @param context + * @param applicationRequest remote session we want to connect to + * @param jsonHttpPort + * @param disconnectListener + * @param connectionListener + */ + public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, ApplicationRequest applicationRequest, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { + String version = context.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); + log.info("Server says version=" + version); + if (!version.contains(ProxyClient.BACKEND_VERSION)) + throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); + + IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener); + LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); + + AtomicInteger relayCommandCounter = new AtomicInteger(); + + /** + * We need to entertain proxy server and remote controller while user has already connected to proxy but has not yet started TunerStudio + */ + THREAD_FACTORY.newThread(() -> { + long start = System.currentTimeMillis(); + try { + while (relayCommandCounter.get() < 4 && !isTimeForApplicationToConnect(context, start)) { + sleep(context.gaugePokingPeriod()); + byte[] commandPacket = GetOutputsCommand.createRequest(); + + synchronized (authenticatorToProxyStream) { + authenticatorToProxyStream.sendPacket(commandPacket); + // we do not really need the data, we just need to take response from the socket + authenticatorToProxyStream.readPacket(); + } + } + + if (isTimeForApplicationToConnect(context, start) && relayCommandCounter.get() < 4) { + // we should not keep controller blocked since we are not connecting application, time to auto-disconnect + authenticatorToProxyStream.close(); + } + + } catch (IOException e) { + log.error("Gauge poker", e); + } + }).start(); + + + ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort(), relayCommandCounter); + LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); + connectionListener.onConnected(localApplicationProxy); + return serverHolder; + } + + private static boolean isTimeForApplicationToConnect(LocalApplicationProxyContext context, long start) { + return System.currentTimeMillis() - start > context.startUpIdle(); + } + + public static void sendHello(IoStream authenticatorToProxyStream, ApplicationRequest applicationRequest) throws IOException { + log.info("Pushing " + applicationRequest); + // right from connection push session authentication data + new HelloCommand(applicationRequest.toJson()).handle(authenticatorToProxyStream); + } + + public static void start() { + throw new UnsupportedOperationException("TODO"); + } + + @Override + public void close() { + serverHolder.close(); + authenticatorToProxyStream.close(); + } + + public interface ConnectionListener { + ConnectionListener VOID = localApplicationProxy -> { + }; + + void onConnected(LocalApplicationProxy localApplicationProxy); + } +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java new file mode 100644 index 0000000000..35a79eaf84 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java @@ -0,0 +1,27 @@ +package com.rusefi.proxy.client; + +import com.rusefi.Timeouts; + +import java.io.IOException; + +public interface LocalApplicationProxyContext { + String executeGet(String url) throws IOException; + + /** + * port on which rusEFI proxy accepts authenticator connections + */ + int serverPortForRemoteApplications(); + + /** + * local port on which authenticator accepts connections from Tuner Studio + */ + int authenticatorPort(); + + default int startUpIdle() { + return 6 * Timeouts.MINUTE; + } + + default int gaugePokingPeriod() { + return 5 * Timeouts.SECOND; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java new file mode 100644 index 0000000000..7cf0862121 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java @@ -0,0 +1,17 @@ +package com.rusefi.proxy.client; + +import com.rusefi.tools.online.HttpUtil; + +import java.io.IOException; + +public abstract class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { + @Override + public String executeGet(String url) throws IOException { + return HttpUtil.executeGet(url); + } + + @Override + public int serverPortForRemoteApplications() { + return LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java index 6d8e12d801..11a269d22d 100644 --- a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java +++ b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java @@ -2,45 +2,42 @@ package com.rusefi.server; import com.rusefi.tools.online.HttpUtil; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.util.Objects; public class ApplicationRequest { private static final String SESSION = "session"; - private static final String USER_ID = "user_id"; private final SessionDetails sessionDetails; - private final int targetUserId; + private final UserDetails targetUser; - public ApplicationRequest(SessionDetails sessionDetails, int targetUserId) { + public ApplicationRequest(SessionDetails sessionDetails, UserDetails targetUser) { this.sessionDetails = sessionDetails; - this.targetUserId = targetUserId; + this.targetUser = targetUser; } public SessionDetails getSessionDetails() { return sessionDetails; } - public int getTargetUserId() { - return targetUserId; + public UserDetails getTargetUser() { + return targetUser; } public String toJson() { JSONObject jsonObject = new JSONObject(); jsonObject.put(SESSION, sessionDetails.toJson()); - jsonObject.put(USER_ID, targetUserId); + targetUser.put(jsonObject); return jsonObject.toJSONString(); } public static ApplicationRequest valueOf(String jsonString) { JSONObject jsonObject = HttpUtil.parse(jsonString); - long targetUserId = (Long) jsonObject.get(USER_ID); + UserDetails userDetails = UserDetails.valueOf(jsonObject); SessionDetails session = SessionDetails.valueOf((String) jsonObject.get(SESSION)); - return new ApplicationRequest(session, (int)targetUserId); + return new ApplicationRequest(session, userDetails); } @Override @@ -48,20 +45,20 @@ public class ApplicationRequest { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ApplicationRequest that = (ApplicationRequest) o; - return targetUserId == that.targetUserId && + return targetUser == that.targetUser && sessionDetails.equals(that.sessionDetails); } @Override public int hashCode() { - return Objects.hash(sessionDetails, targetUserId); + return Objects.hash(sessionDetails, targetUser); } @Override public String toString() { return "ApplicationRequest{" + "sessionDetails=" + sessionDetails + - ", targetUserId=" + targetUserId + + ", targetUserId=" + targetUser + '}'; } } diff --git a/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java b/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java index 65ed561dd2..8010487e26 100644 --- a/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java +++ b/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java @@ -3,8 +3,6 @@ package com.rusefi.server; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.util.Objects; diff --git a/java_console/io/src/main/java/com/rusefi/server/UserDetails.java b/java_console/io/src/main/java/com/rusefi/server/UserDetails.java index 5d6a778d4b..fe89fe6087 100644 --- a/java_console/io/src/main/java/com/rusefi/server/UserDetails.java +++ b/java_console/io/src/main/java/com/rusefi/server/UserDetails.java @@ -19,6 +19,11 @@ public class UserDetails { return new UserDetails(userName, (int) userId); } + void put(JSONObject jsonObject) { + jsonObject.put(USER_ID, getUserId()); + jsonObject.put(USERNAME, getUserName()); + } + public String getUserName() { return userName; } diff --git a/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java b/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java index 68ee54bee0..79f28d2eb1 100644 --- a/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java +++ b/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java @@ -60,8 +60,12 @@ public class rusEFISSLContext { } public static Socket getSSLSocket(String host, int port) throws IOException { - if (isJenkins) - return new Socket(host, port); + if (isJenkins) { + Socket socket = new Socket(host, port); + // responsiveness matters (getting a byte sent to be received as promptly as possible) + socket.setTcpNoDelay(true); + return socket; + } return getSSLSocketFactory(null /*key*/, TLS).createSocket(host, port); } diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index 3b65b97571..c99baaf5ba 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -1,10 +1,13 @@ package com.rusefi.tools.online; +import com.devexperts.logging.Logging; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -12,10 +15,15 @@ import org.json.simple.parser.ParseException; import java.io.IOException; +import static com.devexperts.logging.Logging.getLogging; + public class HttpUtil { + private static final Logging log = getLogging(Logging.class); + // todo: migrate proxy http json API server to TLS public static final String RUSEFI_PROXY_JSON_PROTOCOL = "http://"; - public static final int HTTP_PORT = 8001; + public static final int PROXY_JSON_API_HTTP_PORT = getIntProperty("http.port", 8001); + /** * hostname of PROXY server, not primary rusEFI web server - those are two separate hosts at the moment */ @@ -23,8 +31,7 @@ public class HttpUtil { public static String RUSEFI_ONLINE_JSON_API_PREFIX = "https://rusefi.com/online/api.php?method="; - public static T getJsonResponse(HttpResponse response) throws IOException, ParseException { - String responseString = getResponse(response); + public static T getJsonResponse(String responseString) throws ParseException { JSONParser parser = new JSONParser(); return (T) parser.parse(responseString); @@ -33,15 +40,28 @@ public class HttpUtil { public static String getResponse(HttpResponse response) throws IOException { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity, "UTF-8"); - System.out.println("responseString=" + responseString); + log.info("responseString=" + responseString); return responseString; } - public static HttpResponse executeGet(String url) throws IOException { + public static String executeGet(String url) throws IOException { HttpClient httpclient = new DefaultHttpClient(); - System.out.println("Connecting to " + url); + HttpParams httpParameters = httpclient.getParams(); +// HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); +// HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT); + // without this magic http response is pretty slow + HttpConnectionParams.setTcpNoDelay(httpParameters, true); + log.info("GET " + url); HttpGet httpget = new HttpGet(url); - return httpclient.execute(httpget); + + // in case of emergency + // -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog -Dorg.apache.commons.logging.simplelog.showdatetime=true -Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG -Dorg.apache.commons.logging.simplelog.log.org.apache.http.wire=ERROR + try { + HttpResponse httpResponse = httpclient.execute(httpget); + return HttpUtil.getResponse(httpResponse); + } finally { + httpget.releaseConnection(); + } } public static JSONObject parse(String jsonString) { @@ -54,4 +74,8 @@ public class HttpUtil { } return jsonObject; } + + public static int getIntProperty(String propertyName, int defaultValue) { + return Integer.parseInt(System.getProperty(propertyName, Integer.toString(defaultValue))); + } } diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index c019192b5f..1c630a0333 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -1,8 +1,8 @@ package com.rusefi.tools.online; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.ControllerInfo; import com.rusefi.server.UserDetails; -import org.apache.http.HttpResponse; import org.jetbrains.annotations.NotNull; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -13,12 +13,20 @@ import java.util.ArrayList; import java.util.List; import static com.rusefi.tools.online.HttpUtil.RUSEFI_PROXY_HOSTNAME; +import static com.rusefi.tools.online.HttpUtil.getIntProperty; public class ProxyClient { public static final String LIST_CONTROLLERS_PATH = "/list_controllers"; public static final String LIST_APPLICATIONS_PATH = "/list_applications"; public static final String VERSION_PATH = "/version"; public static final String BACKEND_VERSION = "0.0001"; + public static final String IS_USED = "isUsed"; + public static final String OWNER = "owner"; + /** + * @see HttpUtil#PROXY_JSON_API_HTTP_PORT + * @see LocalApplicationProxy#SERVER_PORT_FOR_APPLICATIONS + */ + public static final int SERVER_PORT_FOR_CONTROLLERS = getIntProperty("controllers.port", 8003); public static List getOnlineApplications(int httpPort) throws IOException { return getOnlineApplications(getHttpAddress(httpPort) + LIST_CONTROLLERS_PATH); @@ -31,18 +39,20 @@ public class ProxyClient { @NotNull public static List getOnlineApplications(String url) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(url); + String responseString = HttpUtil.executeGet(url); List userLists = new ArrayList<>(); try { - JSONArray array = HttpUtil.getJsonResponse(httpResponse); + JSONArray array = HttpUtil.getJsonResponse(responseString); for (int i = 0; i < array.size(); i++) { JSONObject element = (JSONObject) array.get(i); ControllerInfo ci = ControllerInfo.valueOf(element); UserDetails userDetails = UserDetails.valueOf(element); - userLists.add(new PublicSession(userDetails, ci)); + boolean isUsed = (Boolean) element.get(IS_USED); + String ownerName = (String) element.get(OWNER); + userLists.add(new PublicSession(userDetails, ci, isUsed, ownerName)); } System.out.println("object=" + array); diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java b/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java index e226537fe9..b83daf773e 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java @@ -6,10 +6,14 @@ import com.rusefi.server.UserDetails; public class PublicSession { private final UserDetails userDetails; private final ControllerInfo controllerInfo; + private final boolean isUsed; + private final String ownerName; - public PublicSession(UserDetails userDetails, ControllerInfo controllerInfo) { + public PublicSession(UserDetails userDetails, ControllerInfo controllerInfo, boolean isUsed, String ownerName) { this.userDetails = userDetails; this.controllerInfo = controllerInfo; + this.isUsed = isUsed; + this.ownerName = ownerName; } public UserDetails getUserDetails() { @@ -20,11 +24,21 @@ public class PublicSession { return controllerInfo; } + public boolean isUsed() { + return isUsed; + } + + public String getOwnerName() { + return ownerName; + } + @Override public String toString() { return "PublicSession{" + "userDetails=" + userDetails + ", controllerInfo=" + controllerInfo + + ", isUsed=" + isUsed + + ", ownerName='" + ownerName + '\'' + '}'; } } diff --git a/java_console/ui/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java similarity index 56% rename from java_console/ui/src/test/java/com/rusefi/TestHelper.java rename to java_console/io/src/test/java/com/rusefi/TestHelper.java index d506278df4..c6c1d26a43 100644 --- a/java_console/ui/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -11,7 +11,8 @@ import com.rusefi.io.LinkConnector; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.server.Backend; +import com.rusefi.server.ControllerInfo; +import com.rusefi.server.SessionDetails; import com.rusefi.server.rusEFISSLContext; import com.rusefi.tune.xml.Constant; import org.jetbrains.annotations.NotNull; @@ -26,6 +27,11 @@ import static org.junit.Assert.assertTrue; public class TestHelper { public static final String LOCALHOST = "localhost"; + public static final String TEST_SIGNATURE_1 = "rusEFI 2020.07.06.frankenso_na6.2468827536"; + public static final String TEST_SIGNATURE_2 = "rusEFI 2020.07.11.proteus_f4.1986715563"; + public static final ControllerInfo CONTROLLER_INFO = new ControllerInfo("name", "make", "code", Fields.TS_SIGNATURE); + public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012"; + public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012"; @NotNull public static ScalarIniField createIniField(Field field) { @@ -41,23 +47,23 @@ public class TestHelper { } @NotNull - public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, Logger logger) { + public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) throws IOException { BinaryProtocolState state = new BinaryProtocolState(); state.setController(ci); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); - LinkManager linkManager = new LinkManager(logger); + LinkManager linkManager = new LinkManager(); linkManager.setConnector(LinkConnector.getDetachedConnector(state)); - BinaryProtocolServer server = new BinaryProtocolServer(logger); - server.start(linkManager, port, serverSocketCreationCallback); + BinaryProtocolServer server = new BinaryProtocolServer(); + server.start(linkManager, port, serverSocketCreationCallback, context); return server; } @NotNull - public static IoStream secureConnectToLocalhost(int controllerPort, Logger logger) { + public static IoStream secureConnectToLocalhost(int controllerPort) { IoStream targetEcuSocket; try { - targetEcuSocket = new TcpIoStream("[local]", logger, rusEFISSLContext.getSSLSocket(LOCALHOST, controllerPort)); + targetEcuSocket = new TcpIoStream("[local]", rusEFISSLContext.getSSLSocket(LOCALHOST, controllerPort)); } catch (IOException e) { throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort); } @@ -68,29 +74,35 @@ public class TestHelper { public static IoStream connectToLocalhost(int controllerPort, Logger logger) { IoStream targetEcuSocket; try { - targetEcuSocket = new TcpIoStream("[local]", logger, new Socket(LOCALHOST, controllerPort)); + targetEcuSocket = new TcpIoStream("[local]", new Socket(LOCALHOST, controllerPort)); } catch (IOException e) { throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort); } return targetEcuSocket; } - public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, Logger logger) throws InterruptedException { + public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, BinaryProtocolServer.Context context) throws InterruptedException { CountDownLatch controllerCreated = new CountDownLatch(1); - BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), logger); - assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); - return server; + try { + BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context); + assertLatch(controllerCreated); + return server; + } catch (IOException e) { + throw new IllegalStateException(e); + } } - public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { - CountDownLatch applicationServerCreated = new CountDownLatch(1); - backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); - assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + public static SessionDetails createTestSession(String authToken, String signature) { + ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature); + + return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); } - public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { - CountDownLatch controllerServerCreated = new CountDownLatch(1); - backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); - assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + public static void assertLatch(String message, CountDownLatch reconnectCounter) throws InterruptedException { + assertTrue(message, reconnectCounter.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + } + + public static void assertLatch(CountDownLatch reconnectCounter) throws InterruptedException { + assertTrue(reconnectCounter.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); } } diff --git a/java_console/lib/dfu/IntelHexParser.jar b/java_console/lib/dfu/IntelHexParser.jar new file mode 100644 index 0000000000..2c43c34fb3 Binary files /dev/null and b/java_console/lib/dfu/IntelHexParser.jar differ diff --git a/java_console/lib/dfu/dfu_java.jar b/java_console/lib/dfu/dfu_java.jar new file mode 100644 index 0000000000..f58b2d5127 Binary files /dev/null and b/java_console/lib/dfu/dfu_java.jar differ diff --git a/java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar b/java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar new file mode 100644 index 0000000000..41f939c1ed Binary files /dev/null and b/java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar differ diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar new file mode 100644 index 0000000000..0f53f1c16b Binary files /dev/null and b/java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar differ diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar new file mode 100644 index 0000000000..635a77b4b4 Binary files /dev/null and b/java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar differ diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-x86-64.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-x86-64.jar new file mode 100644 index 0000000000..1e4de5e0d9 Binary files /dev/null and b/java_console/lib/dfu/libusb4java-1.3.0-linux-x86-64.jar differ diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar new file mode 100644 index 0000000000..6ccb81562e Binary files /dev/null and b/java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar differ diff --git a/java_console/lib/dfu/usb4java-1.3.0.jar b/java_console/lib/dfu/usb4java-1.3.0.jar new file mode 100644 index 0000000000..d5ac62c6bb Binary files /dev/null and b/java_console/lib/dfu/usb4java-1.3.0.jar differ diff --git a/java_console/lib/jsr305-2.0.1.jar b/java_console/lib/jsr305-2.0.1.jar new file mode 100644 index 0000000000..43807b02f3 Binary files /dev/null and b/java_console/lib/jsr305-2.0.1.jar differ diff --git a/java_console/lib/log4j-api-2.13.3.jar b/java_console/lib/log4j-api-2.13.3.jar new file mode 100644 index 0000000000..f604e80e69 Binary files /dev/null and b/java_console/lib/log4j-api-2.13.3.jar differ diff --git a/java_console/lib/log4j-core-2.13.3.jar b/java_console/lib/log4j-core-2.13.3.jar new file mode 100644 index 0000000000..997e3438f5 Binary files /dev/null and b/java_console/lib/log4j-core-2.13.3.jar differ diff --git a/java_console/logging-api/build.gradle b/java_console/logging-api/build.gradle index c5fc4ba0d4..ac70de7d36 100644 --- a/java_console/logging-api/build.gradle +++ b/java_console/logging-api/build.gradle @@ -1,3 +1,7 @@ plugins { id 'java' +} + +dependencies { + implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' } \ No newline at end of file diff --git a/java_console/logging-api/logging-api.iml b/java_console/logging-api/logging-api.iml index b1d8b0ac28..807d0b23b2 100644 --- a/java_console/logging-api/logging-api.iml +++ b/java_console/logging-api/logging-api.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java new file mode 100644 index 0000000000..6d1b321bfd --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java @@ -0,0 +1,150 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; + +/** + * Logging implementation that uses {@link java.util.logging} logging facilities. + */ +class DefaultLogging { + + Map configure() { + // Heuristically check if there was an attempt to manually configure logging + if (getProperty("java.util.logging.config.class", null) != null || + getProperty("java.util.logging.config.file", null) != null || + !hasDefaultHandlers(Logger.getLogger(""))) + { + return Collections.emptyMap(); // logging was already manually configured + } + return configureLogFile(getProperty(Logging.LOG_FILE_PROPERTY, null)); + } + + private boolean hasDefaultHandlers(Logger root) { + // Default configuration is 1 ConsoleHandler with SimpleFormatter and INFO level + Handler[] handlers = root.getHandlers(); + if (handlers.length != 1) + return false; + Handler handler = handlers[0]; + return handler.getClass() == ConsoleHandler.class && + handler.getFormatter().getClass() == SimpleFormatter.class && + handler.getLevel() == Level.INFO; + } + + Map configureLogFile(String log_file) { + Logger root = Logger.getLogger(""); + Map errors = new LinkedHashMap(); + + try { + // Don't reset configuration. Retain all manually configured loggers, but + // reconfigure the root logger, which (as we checked) has a default configuration with + // 1 ConsoleHandler with SimpleFormatter and INFO level + for (Handler handler : root.getHandlers()) + root.removeHandler(handler); + + // configure "log" file or console + Handler handler = null; + if (log_file != null) { + try { + handler = new FileHandler(log_file, getLimit(Logging.LOG_MAX_FILE_SIZE_PROPERTY, errors), 2, true); + } catch (IOException e) { + errors.put(log_file, e); + } + } + if (handler == null) + handler = new ConsoleHandler(); + handler.setFormatter(new LogFormatter()); + handler.setLevel(Level.ALL); + root.addHandler(handler); + + // configure "err" file + String err_file = getProperty(Logging.ERR_FILE_PROPERTY, null); + if (err_file != null) { + try { + handler = new FileHandler(err_file, getLimit(Logging.ERR_MAX_FILE_SIZE_PROPERTY, errors), 2, true); + handler.setFormatter(new LogFormatter()); + handler.setLevel(Level.WARNING); + root.addHandler(handler); + } catch (IOException e) { + errors.put(err_file, e); + } + } + } catch (SecurityException e) { + // ignore -- does not have persmission to change configuration + } + return errors; + } + + Object getPeer(String name) { + return Logger.getLogger(name); + } + + String getName(Object peer) { + return ((Logger)peer).getName(); + } + + boolean debugEnabled(Object peer) { + return ((Logger)peer).isLoggable(Level.FINE); + } + + void setDebugEnabled(Object peer, boolean debug_enabled) { + ((Logger)peer).setLevel(debug_enabled ? Level.ALL : Level.INFO); + } + + void log(Object peer, Level level, String msg, Throwable t) { + ((Logger)peer).log(level, msg, t); + } + + // ========== Utility methods ========== + + /** + * Safely, from security point of view, gets system property. + */ + static String getProperty(String key, String def) { + // For applets we need to be ready for security exception in getProperty() call + try { + return System.getProperty(key, def); + } catch (SecurityException e) { + return def; + } + } + + static int getLimit(String key, Map errors) { + String value = getProperty(key, Logging.DEFAULT_MAX_FILE_SIZE).trim(); + int multiplier = 1; + if (value.endsWith("K") || value.endsWith("k")) { + multiplier = 1024; + value = value.substring(0, value.length() - 1); + } else if (value.endsWith("M") || value.endsWith("m")) { + multiplier = 1024 * 1024; + value = value.substring(0, value.length() - 1); + } else if (value.endsWith("G") || value.endsWith("g")) { + multiplier = 1024 * 1024 * 1024; + value = value.substring(0, value.length() - 1); + } + try { + return Integer.valueOf(value) * multiplier; + } catch (NumberFormatException e) { + errors.put(key, e); + return 0; + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java b/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java new file mode 100644 index 0000000000..2c3eb86700 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java @@ -0,0 +1,185 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import com.devexperts.util.TimeUtil; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.Calendar; +import java.util.TimeZone; +import java.util.function.BiConsumer; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import javax.annotation.concurrent.ThreadSafe; + +/** + * Thread-safe formatter for log messages. + * It is used for formatting log4j, log4j2 and {@link java.util.logging} log messages. + * Performs conversion of thread names according to patterns specified in configuration file. + *

+ * If the system property {@code logformatter.properties} is specified, then it should contain + * an URL to the configuration file. Otherwise, configuration is loaded from classpath, using + * /META-INF/logformatter.properties file. + *

+ * The format of the file is: + *

    + *
  • pattern=replacement + *
  • "Pattern" uses regular expression syntax. + * You can escape "=" in pattern with "\=" syntax. + *
  • "Replacement" string can refer to capturing groups defined in pattern using usual + * regular expression syntax "$n", where "n" stands for the number of the group. + *
  • ISO 8859-1 encoding is used. + *
  • Empty lines and lines starting with # or ! are ignored. + * Lines containing wrong patterns are ignored. + *
+ * Configuration file is loaded during class loading. + * Any errors which occur in this class are printed in {@code System.err}. + *

+ * Sample configuration file can be found in etc/logformatter.properties. + *

+ * This class is not intended to be used standalone. + * It is a part of implementation of {@link com.devexperts.logging} package. + * + * @see DetailedLogLayout + * @see DxFeedPatternLayout + */ +@ThreadSafe +public class LogFormatter extends Formatter { + public static final String CONFIG_FILE_PROPERTY = "logformatter.properties"; + public static final String DEFAULT_CONFIG_FILE = "/META-INF/logformatter.properties"; + + private static final String LINE_SEP = DefaultLogging.getProperty("line.separator", "\n"); + private static final BiConsumer STRING_FORMAT_CONSUMER = (s, sb) -> sb.append(s); + + // ============== Instance ================ + private final ThreadLocal formatter; + + public LogFormatter() { + this(TimeZone.getDefault()); + } + + public LogFormatter(TimeZone zone) { + formatter = ThreadLocal.withInitial(() -> new LocalFormatter(zone)); + } + + /** + * Used by {@link java.util.logging} logging. + * Formats messages with the same format as for log4j. + */ + @Override + public String format(LogRecord record) { + String s = format(getLevelChar(record.getLevel()), + record.getMillis(), Thread.currentThread().getName(), + record.getLoggerName(), formatMessage(record)); + if (record.getThrown() != null) { + StringWriter sw = new StringWriter(); + sw.write(s); + record.getThrown().printStackTrace(new PrintWriter(sw)); + s = sw.toString(); + } + return s; + } + + /** + * Formats log message. + * + * @return Formatted message. + * @throws NullPointerException when threadName, loggerName, or msg are {@code null}. + */ + public String format(char levelChar, long time, String threadName, String loggerName, String msg) { + StringBuilder out = formatter.get().appendTo; + out.setLength(0); + try { + format(levelChar, time, threadName, loggerName, STRING_FORMAT_CONSUMER, msg, out); + return out.toString(); + } finally { + boolean trim = out.length() > 1000; + out.setLength(0); + if (trim) + out.trimToSize(); + } + } + + void format(char levelChar, long time, String threadName, String loggerName, + BiConsumer msgConsumer, Object msg, StringBuilder out) + { + out.append(levelChar).append(" "); + formatter.get().appendTime(time, out); + out.append(" "); + int threadPosition = out.length(); + out.append("["); + out.append(ThreadNameFormatter.formatThreadName(time, threadName)); + out.append("] "); + out.append(loggerName, loggerName.lastIndexOf('.') + 1, loggerName.length()); + out.append(" - "); + int messagePosition = out.length(); + msgConsumer.accept(msg, out); + out.append(LINE_SEP); + if (out.length() > messagePosition && out.charAt(messagePosition) == '\b') + out.delete(threadPosition, messagePosition + 1); + } + + static char getLevelChar(Level level) { + int levelInt = level.intValue(); + if (levelInt <= Level.FINEST.intValue()) + return 'T'; + if (levelInt <= Level.FINE.intValue()) + return 'D'; + if (levelInt <= Level.INFO.intValue()) + return 'I'; + if (levelInt <= Level.WARNING.intValue()) + return 'W'; + return 'E'; + } + + private static class LocalFormatter { + private final Calendar calendar; + private final char[] timeBuffer = new char[17]; // fixed-size buffer for time data "yyMMdd HHmmss.SSS" + private final StringBuilder appendTo = new StringBuilder(); + + private long translatedMinute; + + private LocalFormatter(TimeZone zone) { + calendar = Calendar.getInstance(zone); + Arrays.fill(timeBuffer, 0, 17, ' '); + timeBuffer[13] = '.'; + } + + private void appendTime(long time, StringBuilder out) { + if (time < translatedMinute || time >= translatedMinute + TimeUtil.MINUTE) { + // set year, month, day, hour and minute + calendar.setTimeInMillis(time); + translatedMinute = calendar.getTime().getTime() - calendar.get(Calendar.SECOND) * 1000 - calendar.get(Calendar.MILLISECOND); + print2(0, calendar.get(Calendar.YEAR)); + print2(2, calendar.get(Calendar.MONTH) + 1); + print2(4, calendar.get(Calendar.DAY_OF_MONTH)); + print2(7, calendar.get(Calendar.HOUR_OF_DAY)); + print2(9, calendar.get(Calendar.MINUTE)); + } + + // set seconds and milliseconds + int millis = (int)(time - translatedMinute); + print2(11, millis / 1000); + print2(14, millis / 10); + timeBuffer[16] = (char)('0' + millis % 10); + out.append(timeBuffer); + } + + private void print2(int offset, int value) { + timeBuffer[offset] = (char)('0' + (value / 10) % 10); + timeBuffer[offset + 1] = (char)('0' + value % 10); + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java new file mode 100644 index 0000000000..8a1bbea812 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java @@ -0,0 +1,235 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.logging.Level; + +/** + * Main logging class. + * It supports use of both log4j and {@link java.util.logging} logging facilities. + *

First it tries to use log4j logging. If this attempt fails, it uses {@link java.util.logging} logging, + * so you'll always have some logging running. + *

Usage pattern: + *
public class SomeClass { + *
private static final Logging log = Logging.getLogging(SomeClass.class); + *
} + *
+ * + * @see Log4jLogging + * @see DefaultLogging + * @see LogFormatter + */ +public class Logging { + private static final boolean TRACE_LOGGING = Logging.class.desiredAssertionStatus(); + + private static final int FINEST_INT = Level.FINEST.intValue(); + private static final int FINE_INT = Level.FINE.intValue(); + + public static final String LOG_CLASS_NAME = "log.className"; + public static final String LOG_FILE_PROPERTY = "log.file"; + public static final String ERR_FILE_PROPERTY = "err.file"; + public static final String LOG_MAX_FILE_SIZE_PROPERTY = "log.maxFileSize"; + public static final String ERR_MAX_FILE_SIZE_PROPERTY = "err.maxFileSize"; + public static final String DEFAULT_MAX_FILE_SIZE = "900M"; + + private static final ConcurrentMap INSTANCES = new ConcurrentHashMap<>(); + private static final DefaultLogging IMPL = configure(DefaultLogging.getProperty(LOG_CLASS_NAME, "com.devexperts.logging.Log4j2Logging")); + + public static Logging getLogging(Class clazz) { + return getLogging(clazz.getName()); + } + + public static Logging getLogging(String name) { + Logging logging = INSTANCES.get(name); + if (logging != null) + return logging; + INSTANCES.putIfAbsent(name, new Logging(name)); + return INSTANCES.get(name); + } + + /** + * Programmatically reconfigures logging to a specified file. This method + * overrides the value of {@link #LOG_FILE_PROPERTY} system property. + */ + public static void configureLogFile(String log_file) { + reportErrors(IMPL, IMPL.configureLogFile(log_file)); + } + + // ========== Instance ========= + + private final Object peer; + + /** + * This constructor is designed for abstract framework classes like BeanBase or + * DAOBase that extend Logging to decorate messages by + * overriding {@link #decorateLogMessage(String)} method. + */ + protected Logging() { + peer = IMPL.getPeer(getClass().getName()); + } + + protected Logging(String name) { + peer = IMPL.getPeer(name); + } + + /** + * Returns category name of this logging. + */ + public final String getName() { + return IMPL.getName(peer); + } + + /** + * Changes default {@link #debugEnabled()} behaviour for this logging instance. + * Use this method to turn off debugging information for classes that do not + * need to print their debugging information in production environment. + */ + public final void configureDebugEnabled(boolean defaultDebugEnabled) { + IMPL.setDebugEnabled(peer, Boolean.valueOf(DefaultLogging.getProperty(getName() + ".debug", + String.valueOf(defaultDebugEnabled)))); + } + + public final boolean debugEnabled() { + return IMPL.debugEnabled(peer); + } + + public final void trace(String message) { + log(Level.FINEST, message, null); + } + + public final void debug(String message) { + log(Level.FINE, message, null); + } + + public final void debug(String message, Throwable t) { + log(Level.FINE, message, t); + } + + public final void info(String message) { + log(Level.INFO, message, null); + } + + public final void info(String message, Throwable t) { + log(Level.INFO, message, t); + } + + public final void warn(String message) { + log(Level.WARNING, message, null); + } + + public final void warn(String message, Throwable t) { + log(Level.WARNING, message, t); + } + + public final void error(String message) { + log(Level.SEVERE, message, null); + } + + public final void error(String message, Throwable t) { + log(Level.SEVERE, message, t); + } + + public final RuntimeException log(RuntimeException e) { + log(Level.SEVERE, e.getMessage(), e); + return e; + } + + /** + * Decorates log message (reformatting, auditing, etc). + * This method is invoked one time for each logging event. + */ + protected String decorateLogMessage(String msg) { + return msg; + } + + // ========== Internal ========== + + private void log(Level level, String msg, Throwable t) { + if (TRACE_LOGGING) + TraceLogging.log(getName(), level, decorateLogMessage(msg), t); + int levelInt = level.intValue(); + if (levelInt <= FINEST_INT) + return; // trace never goes to regular log + if (levelInt <= FINE_INT && !IMPL.debugEnabled(peer)) + return; + try { + msg = decorateLogMessage(msg == null ? "" : msg); + } catch (Throwable tt) { + IMPL.log(peer, Level.SEVERE, "Failed to decorate log message", tt); + } + IMPL.log(peer, level, msg, t); + } + + /** + * At first tries to use logging from passed class name. If this attempt fails, tries to use log4j logging. + * If this attempt fails, it uses log4j2 logging. If this attempt fails, it uses {@link java.util.logging} logging. + * + * @return Logging implementation + */ + private static DefaultLogging configure(String className) { + DefaultLogging impl = null; + Map errors = new LinkedHashMap<>(); + if (!className.isEmpty()) { + try { + impl = (DefaultLogging)Class.forName(className).newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure with passed class name + impl = null; + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put(className + " link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + try { + impl = (DefaultLogging)Class.forName("com.devexperts.logging.Log4jLogging").newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure log4j + impl = null; + // LinkageError means that log4j is not found at all, otherwise it was found but our config is wrong + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put("log4j link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + try { + impl = (DefaultLogging)Class.forName("com.devexperts.logging.Log4j2Logging").newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure log4j2 + impl = null; + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put("log4j2 link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + impl = new DefaultLogging(); + errors.putAll(impl.configure()); + } + + reportErrors(impl, errors); + return impl; + } + + private static void reportErrors(DefaultLogging impl, Map errors) { + for (Map.Entry entry : errors.entrySet()) + impl.log(impl.getPeer("config"), Level.SEVERE, entry.getKey(), entry.getValue()); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java b/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java new file mode 100644 index 0000000000..96163c2de1 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java @@ -0,0 +1,179 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import com.devexperts.util.IndexedSet; +import com.devexperts.util.QuickSort; +import com.devexperts.util.SynchronizedIndexedSet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +class ThreadNameFormatter implements Comparable { + + /** + * Configuration as a set of pairs (pattern, replacement). + */ + private static final Map PATTERNS = new LinkedHashMap<>(); + + private static final int MAX_NAME_CONVERSIONS_CACHE_SIZE = 1000; + + /** + * Thread name replacement cache: (thread name, replacement string). + */ + private static final IndexedSet NAME_CONVERSIONS = SynchronizedIndexedSet.create(ThreadNameFormatter::getThreadName); + + static { + loadPatterns(); + } + + private static void loadPatterns() { + InputStream config_input_stream = null; + try { + String config_path = DefaultLogging.getProperty(LogFormatter.CONFIG_FILE_PROPERTY, null); + if (config_path != null) + throw new UnsupportedOperationException("loadPatterns"); +/* + try { + config_input_stream = new URLInputStream(config_path); + } catch (IOException e) { + System.err.println("Cannot find log formatter configuration file: '" + config_path + "'"); + System.err.println("No thread name conversion will be performed."); + return; + } +*/ else + config_input_stream = LogFormatter.class.getResourceAsStream(LogFormatter.DEFAULT_CONFIG_FILE); + + if (config_input_stream == null) + return; + + BufferedReader reader = new BufferedReader( + new InputStreamReader(config_input_stream, Charset.forName("ISO-8859-1"))); + + Pattern config_line_pattern = Pattern.compile("((?:[^=]|(?:\\\\=))*[^\\\\=])=(.*)"); + Pattern whitespace_line_pattern = Pattern.compile("\\s*"); + Pattern comment_line_pattern = Pattern.compile("#.*|!.*"); + String line; + Set patterns_set = new HashSet(); + while ((line = reader.readLine()) != null) { + Matcher config_line_matcher = config_line_pattern.matcher(line); + // If it is whitespace or comment line + if (whitespace_line_pattern.matcher(line).matches() || comment_line_pattern.matcher(line).matches()) + continue; + if (!config_line_matcher.matches()) { + System.err.println("The following line cannot be parsed in log formatter configuration file: '" + line + "'"); + continue; + } + String config_pattern = config_line_matcher.group(1); + String config_replacement = config_line_matcher.group(2); + if (!patterns_set.add(config_pattern)) { + System.err.println("Duplicate pattern found in log formatter configuration file: '" + config_pattern + "'"); + continue; + } + try { + PATTERNS.put(Pattern.compile(config_pattern), config_replacement); + } catch (PatternSyntaxException e) { + System.err.println("Cannot parse config pattern in log formatter configuration file: '" + config_pattern + "'"); + } + } + } catch (IOException e) { + // Do not wish to log using logger until initialization has completed. + System.err.println("Cannot read log formatter configuration file"); + e.printStackTrace(System.err); + } finally { + try { + if (config_input_stream != null) { + config_input_stream.close(); + } + } catch (IOException e) { + // Do not wish to log using logger until initialization has completed. + System.err.println("Cannot close log formatter configuration file"); + e.printStackTrace(System.err); + } + } + } + + /** + * Formats thread name according to thread name conversion rules. + * + * @return Formatted thread name + */ + static String formatThreadName(long time, String thread_name) { + ThreadNameFormatter entry = NAME_CONVERSIONS.getByKey(thread_name); + if (entry == null) { + cleanupNameConversionsIfNeeded(); + entry = new ThreadNameFormatter(thread_name, calculateThreadNameReplacement(thread_name)); + NAME_CONVERSIONS.put(entry); + } + entry.last_time = time; + return entry.replacement_name; + } + + private static void cleanupNameConversionsIfNeeded() { + if (NAME_CONVERSIONS.size() <= MAX_NAME_CONVERSIONS_CACHE_SIZE) + return; // everything is Ok + + synchronized (NAME_CONVERSIONS) { + if (NAME_CONVERSIONS.size() <= MAX_NAME_CONVERSIONS_CACHE_SIZE) + return; // everything is Ok + ThreadNameFormatter[] entries = NAME_CONVERSIONS.toArray(new ThreadNameFormatter[NAME_CONVERSIONS.size()]); + QuickSort.sort(entries); + for (int i = 0; i < entries.length - MAX_NAME_CONVERSIONS_CACHE_SIZE / 2; i++) + NAME_CONVERSIONS.removeKey(entries[i].thread_name); + } + } + + private static String calculateThreadNameReplacement(String thread_name) { + for (Map.Entry entry : PATTERNS.entrySet()) { + Matcher matcher = entry.getKey().matcher(thread_name); + if (matcher.matches()) { + String config_replacement = entry.getValue(); + try { + return matcher.replaceAll(config_replacement); + } catch (IndexOutOfBoundsException e) { + // The replacement string refers to a capturing group that does not exist in the pattern. + // To prevent cycling log it as is. + // Incorrect replacement. Just use thread name. + System.err.println("Cannot parse replacement string in log formatter configuration file: '" + config_replacement + "'"); + } + } + } + return thread_name; + } + + final String thread_name; + final String replacement_name; + long last_time; // Atomicity, visibility and consistency of this field are unimportant. + + ThreadNameFormatter(String thread_name, String replacement_name) { + this.thread_name = thread_name; + this.replacement_name = replacement_name; + } + + private String getThreadName() { + return thread_name; + } + + public int compareTo(ThreadNameFormatter o) { + return last_time < o.last_time ? -1 : last_time > o.last_time ? 1 : 0; + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java new file mode 100644 index 0000000000..860655a901 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java @@ -0,0 +1,146 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.io.PrintStream; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; + +/** + * This is a small in-memory cyclic buffer to keep the log for debugging concurrency problems in order to + * reconstruct what was going on immediately before tests crashes, without actually writing all debug logging + * to the log file or console normally. It is used by some tests when assertions are enabled, + * otherwise this class should not even be loaded. + */ +public class TraceLogging { + private static final int STOPPED_INDEX = -1; + private static final int SIZE = Integer.parseInt(System.getProperty("TraceLogging.size", "4096")); // must be power of 2 + private static final int MASK = SIZE - 1; + + private static final int THREAD_OFS = 0; + private static final int NAME_OFS = 1; + private static final int LEVEL_OFS = 2; + private static final int MSG_OFS = 3; + private static final int THROWABLE_OFS = 4; + private static final int DATA_CNT = 5; + + private static final long[] timeQueue = new long[SIZE]; + private static final Object[] dataQueue = new Object[SIZE * DATA_CNT]; + private static final AtomicInteger index = new AtomicInteger(STOPPED_INDEX); + private static int lastIndex = STOPPED_INDEX; + + static { + if ((SIZE & MASK) != 0) + throw new RuntimeException("Size must be a power of two"); + } + + /** + * Restarts trace logging from scratch (old log entries are cleared). + * Use it at the beginning of the test. + */ + public static synchronized void restart() { + Arrays.fill(dataQueue, null); + lastIndex = STOPPED_INDEX; + index.compareAndSet(STOPPED_INDEX, 0); + } + + /** + * Stops trace logging. + */ + public static void stop() { + stopIndex(-1); + } + + /** + * Adds log entry. It is invoked from {@link Logging#log(Level, String, Throwable)} method when + * assertions are enabled. + */ + public static void log(String loggerName, Level level, String msg, Throwable t) { + append(nextIndex(), loggerName, level, msg, t); + } + + /** + * Adds last entry and stops trace logging. + */ + public static void logAndStop(Class where, String msg) { + logAndStop(where, msg, null); + } + + /** + * Adds last entry with exception and stops trace logging. + */ + public static void logAndStop(Class where, String msg, Throwable t) { + append(stopIndex(0), where.getName(), Level.INFO, msg, t); + } + + private static void append(int i, String loggerName, Level level, String msg, Throwable t) { + if (i < 0) + return; + timeQueue[i] = System.currentTimeMillis(); + dataQueue[i * DATA_CNT + THREAD_OFS] = Thread.currentThread(); + dataQueue[i * DATA_CNT + NAME_OFS] = loggerName; + dataQueue[i * DATA_CNT + LEVEL_OFS] = level; + dataQueue[i * DATA_CNT + MSG_OFS] = msg; + dataQueue[i * DATA_CNT + THROWABLE_OFS] = t; + } + + /** + * Dumps last entries from this trace log. + * It should be called after {@link #stop()} or {@link #logAndStop(Class, String)}. + * It does nothing if called more than once after stop or before stop. + */ + public static synchronized void dump(PrintStream out, String title) { + int stop = lastIndex; + if (stop < 0) + return; + lastIndex = STOPPED_INDEX; + LogFormatter formatter = new LogFormatter(); + out.println("********************** Dump trace log for " + title); + int i = stop; + do { + i = (i + 1) & MASK; + Thread thread = (Thread)dataQueue[i * DATA_CNT + THREAD_OFS]; + if (thread == null) + continue; + String loggerName = (String)dataQueue[i * DATA_CNT + NAME_OFS]; + Level level = (Level)dataQueue[i * DATA_CNT + LEVEL_OFS]; + String msg = (String)dataQueue[i * DATA_CNT + MSG_OFS]; + Throwable t = (Throwable)dataQueue[i * DATA_CNT + THROWABLE_OFS]; + long time = timeQueue[i]; + out.print("* "); + out.print(formatter.format(LogFormatter.getLevelChar(level), time, thread.getName(), loggerName, msg)); + if (t != null) + t.printStackTrace(out); + } while (i != stop); + out.println("********************** Done trace log for " + title); + } + + private static int nextIndex() { + int result; + do { + result = index.get(); + } while (result >= 0 && !index.compareAndSet(result, (result + 1) & MASK)); + return result; + } + + private static synchronized int stopIndex(int lastOffset) { + int result; + do { + result = index.get(); + } while (result >= 0 && !index.compareAndSet(result, STOPPED_INDEX)); + if (result >= 0) + lastIndex = (result + lastOffset) & MASK; + return result; + } + +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/package.html b/java_console/logging-api/src/main/java/com/devexperts/logging/package.html new file mode 100644 index 0000000000..95c5d9998a --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/package.html @@ -0,0 +1,16 @@ + + + +Provides logging classes. + + diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java new file mode 100644 index 0000000000..30752ab7cf --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java @@ -0,0 +1,221 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.lang.reflect.Array; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; + +/** + * Provides a skeletal implementation of the {@link Set Set} interface to minimize the effort + * required to implement this interface. Unlike {@link AbstractSet AbstractSet} skeletal implementation, + * this one is more forgiving to concurrent modifications of this set during implemented bulk operations. + */ +public abstract class AbstractConcurrentSet implements Set { + + // ========== Construction and Clearing ========== + + /** + * Sole constructor; for invocation by subclass constructors, typically implicit. + */ + protected AbstractConcurrentSet() {} + + /** + * Removes all of the elements from this set. + *

+ * This implementation iterates all elements of this set and removes them using {@link Iterator#remove()} method. + */ + public void clear() { + for (Iterator it = iterator(); it.hasNext();) { + it.next(); + it.remove(); + } + } + + // ========== Query Operations ========== + + /** + * Tests if this set has no elements. + *

+ * This implementation checks emptiness using {@link #size()} method. + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns an array containing all of the elements in this set. + * Obeys the general contract of the {@link Collection#toArray()} method. + *

+ * This implementation iterates all elements of this set and adds them into the array. + */ + public Object[] toArray() { + return toArrayImpl(null); + } + + /** + * Returns an array containing all of the elements in this set whose runtime type + * is that of the specified array. + * Obeys the general contract of the {@link Collection#toArray(Object[])} method. + *

+ * This implementation iterates all elements of this set and adds them into the array. + */ + public T[] toArray(T[] a) { + return toArrayImpl(a); + } + + @SuppressWarnings("unchecked") + private T[] toArrayImpl(T[] a) { + // If (a == null) then returned array shall be of exact length, otherwise it can be larger. + int size = size(); // Atomic read. + Object[] result = a == null ? new Object[size] : a.length >= size ? a : + (Object[])Array.newInstance(a.getClass().getComponentType(), size); + int n = 0; + for (E o : this) { + if (n >= result.length) { + // More elements were added concurrently. Enlarge result array. + // Grow twice in size, but do not fail when (n == 0). + Object[] tmp = (Object[])Array.newInstance(result.getClass().getComponentType(), n + n + 1); + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + result[n++] = o; + } + if (n < result.length && a == null) { + // Shrink allocated array to exact size. + Object[] tmp = new Object[n]; + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + if (n < result.length) + result[n] = null; + return (T[])result; + } + + // ========== Bulk Operations ========== + + /** + * Tests if this set contains all of the elements in the specified collection. + *

+ * This implementation iterates all elements of specified collection and tests + * them one-by-one using {@link #contains(Object) contains(element)} method. + */ + public boolean containsAll(Collection c) { + for (Object o : c) + if (!contains(o)) + return false; + return true; + } + + /** + * Adds all of the elements in the specified collection into this set and + * returns true if this operation has increased the size of this set. + *

+ * This implementation iterates all elements of specified collection and adds + * them one-by-one using {@link #add(Object) add(element)} method. + */ + public boolean addAll(Collection c) { + boolean modified = false; + for (E o : c) + if (add(o)) + modified = true; + return modified; + } + + /** + * Removes all of the elements in the specified collection from this set and + * returns true if this operation has decreased the size of this set. + *

+ * This implementation compares size of specified collection with the size of this set, + * then iterates smaller collection and removes elements that need to be removed. + */ + public boolean removeAll(Collection c) { + boolean modified = false; + if (size() > c.size()) { + for (Object o : c) + if (remove(o)) + modified = true; + } else { + for (Iterator it = iterator(); it.hasNext();) + if (c.contains(it.next())) { + it.remove(); + modified = true; + } + } + return modified; + } + + /** + * Retains only the elements in this set that are contained in the specified collection. + *

+ * This implementation iterates all elements of this set, checks if they are contained in + * the specified collection, and removes them if needed using {@link Iterator#remove()} method. + */ + public boolean retainAll(Collection c) { + boolean modified = false; + for (Iterator it = iterator(); it.hasNext();) + if (!c.contains(it.next())) { + it.remove(); + modified = true; + } + return modified; + } + + // ========== Comparison and Hashing ========== + + /** + * Compares the specified object with this set for equality. + * Obeys the general contract of the {@link Set#equals(Object)} method. + *

+ * This implementation compares size of specified set with the size of this set and then + * checks element containment using {@link #containsAll(Collection) containsAll((Set)o)} method. + */ + public boolean equals(Object o) { + return o == this || o instanceof Set && size() == ((Set)o).size() && containsAll((Set)o); + } + + /** + * Returns the hash code value for this set. + * Obeys the general contract of the {@link Set#hashCode()} method. + *

+ * This implementation iterates all elements of this set and adds their hash codes. + */ + public int hashCode() { + int hash = 0; + for (E o : this) + if (o != null) + hash += o.hashCode(); + return hash; + } + + // ========== String Conversion ========== + + /** + * Returns a string representation of this set. + *

+ * This implementation iterates all elements of this set and concatenates their string representations. + */ + public String toString() { + StringBuilder sb = new StringBuilder(size() * 3 + 10); + sb.append("["); + String separator = ""; + for (E o : this) { + sb.append(separator); + sb.append(o); + separator = ", "; + } + sb.append("]"); + return sb.toString(); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java new file mode 100644 index 0000000000..98ff6bbdb4 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java @@ -0,0 +1,1407 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collector; +import javax.annotation.Nonnull; + +/** + * A collection that contains no duplicate elements according to specified identification strategy. + * The IndexedSet class implements and obeys general contracts of {@link Set Set} interface + * and provides additional benefits over standard implementations: + * + *

    + *
  • delegation of element identification to external strategy + *
  • concurrent asynchronous read access + *
  • smaller memory footprint and faster performance + *
+ * + *

The IndexedSet assumes that identity of an element can be represented by a variable number + * of attributes, therefore it delegates identification to an external strategy — the {@link IndexerFunction}. + * In order to fulfil contracts of {@link Map Map} interface and for convenience, the IndexedSet + * supports concept of explicit key object and also numeric key representation, but these + * identification means are optional and need not be supported by all strategies. + * + *

Note that the IndexedSet is not synchronized! Concurrent modifications of IndexedSet + * from multiple threads must be synchronized externally to preserve data integrity. + * On the other side, the IndexedSet fully supports concurrent asynchronous read operations, + * which works during concurrent modification by other thread. In case of concurrent modification + * each atomic read sees IndexedSet either before or after each atomic write operation. + * + *

The IndexedSet does not support null values, but it supports null keys + * if they are supported by corresponding {@link IndexerFunction}. The IndexedSet is serializable. + */ +public class IndexedSet extends AbstractConcurrentSet implements Cloneable, Serializable { + private static final long serialVersionUID = 0L; + + // 'private' fields and methods of IndexedSet class shall be accessed only from within IndexedSet class itself. + + private final IndexerFunction indexer; + private transient volatile Core core; + + // ========== static factory methods =========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public static IndexedSet create() { + return new IndexedSet<>(); + } + + /** + * Creates new empty set with default identity indexer. + */ + public static IndexedSet createIdentity() { + return new IndexedSet<>((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Creates new empty set with specified indexer. + */ + public static IndexedSet create(IndexerFunction indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified identity indexer. + */ + public static IndexedSet createIdentity(IndexerFunction.IdentityKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified int indexer. + */ + public static IndexedSet createInt(IndexerFunction.IntKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified long indexer. + */ + public static IndexedSet createLong(IndexerFunction.LongKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with default indexer containing specified elements. + */ + @SafeVarargs + public static IndexedSet of(V... objs) { + return new IndexedSet<>(Arrays.asList(objs)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with default indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + @SuppressWarnings("unchecked") + public static Collector> collector() { + return collector((IndexerFunction)IndexerFunction.DEFAULT); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with default identity indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity() { + return collector((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collector(IndexerFunction indexer) { + return Collector.of(() -> create(indexer), IndexedSet::add, + (left, right) -> { left.addAll(right); return left; }, + Collector.Characteristics.UNORDERED, Collector.Characteristics.IDENTITY_FINISH); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified identity indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity(IndexerFunction.IdentityKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified int indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorInt(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified long indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorLong(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorInt(IndexerFunction.IntKey) collectorInt(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorLong(IndexerFunction.LongKey) collectorLong(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + // ========== Construction and Sizing Operations ========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public IndexedSet() { + this(0); + } + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT} and specified initial capacity. + */ + @SuppressWarnings("unchecked") + public IndexedSet(int initialCapacity) { + this(IndexerFunction.DEFAULT, initialCapacity); + } + + /** + * Creates new empty set with specified indexer. + */ + protected IndexedSet(IndexerFunction indexer) { + this(indexer, 0); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)} + */ + @Deprecated + public IndexedSet(Indexer indexer) { + this((IndexerFunction) indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + */ + @SuppressWarnings("unchecked") + protected IndexedSet(IndexerFunction indexer, int initialCapacity) { + if (indexer == null) + throw new NullPointerException("Indexer is null."); + this.indexer = indexer; + this.core = initialCapacity <= 0 ? (Core)Core.EMPTY_CORE : new Core(indexer, initialCapacity, GOLDEN_RATIO); // Atomic volatile write. + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public IndexedSet(Indexer indexer, int initialCapacity) { + this((IndexerFunction) indexer, initialCapacity); + } + + /** + * Creates a new set containing the elements in the specified collection. + * If specified collection is an {@link IndexedSet}, then new indexed set uses same indexer, + * otherwise it uses default indexer {@link IndexerFunction#DEFAULT}. + */ + @SuppressWarnings("unchecked") + public IndexedSet(Collection c) { + this(c instanceof IndexedSet ? ((IndexedSet) c).getIndexerFunction() : IndexerFunction.DEFAULT, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + */ + protected IndexedSet(IndexerFunction indexer, Collection c) { + this(indexer, c.size()); + addAll(c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public IndexedSet(Indexer indexer, Collection c) { + this((IndexerFunction) indexer, c); + } + + /** + * Returns a shallow copy of this set - the values themselves are not cloned. + */ + @SuppressWarnings({"unchecked"}) + @Override + public IndexedSet clone() { + try { + IndexedSet result = (IndexedSet)super.clone(); + if (result.core != Core.EMPTY_CORE) + result.core = new Core<>(result.core); + return result; + } catch (CloneNotSupportedException e) { + throw new InternalError(); + } + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + *

+ * Returns this set instance for convenience. + */ + public IndexedSet withCapacity(int capacity) { + ensureCapacity(capacity); + return this; + } + + /** + * Adds all of the elements in the specified collection into this set. + *

+ * Returns this set instance for convenience. + */ + public IndexedSet withElements(Collection c) { + ensureCapacity(c.size()); + addAll(c); + return this; + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + */ + public void ensureCapacity(int capacity) { + core = core.ensureCapacity(indexer, capacity); // Atomic volatile read and write. + } + + /** + * Trims the capacity of this set instance to be the set's current size. + * An application can use this operation to minimize the storage of this set instance. + */ + public void trimToSize() { + core = core.trimToSize(indexer); // Atomic volatile read and write. + } + + /** + * Removes all elements from this set. + */ + @Override + public void clear() { + core = core.clear(); // Atomic volatile read and write. + } + + // ========== Query Operations ========== + + /** + * Returns indexer used to distinguish and identify elements in this set. + * + * @deprecated Use {@link #getIndexerFunction()} + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + @Deprecated + public Indexer getIndexer() { + return indexer instanceof Indexer ? (Indexer)indexer : new Indexer.DelegateIndexer(indexer); + } + + /** + * Returns indexer function used to distinguish and identify elements in this set. + */ + public IndexerFunction getIndexerFunction() { + return indexer; + } + + /** + * Returns the number of elements in this set. + */ + @Override + public int size() { + return core.size(); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified value or null if none were found. + */ + public V getByValue(V value) { + return core.getByValue(value); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(K key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(int key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(long key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns true if this set contains element which matches specified value. + *

+ * This implementation delegates to ({@link #getByValue(Object) getByValue(value)} != null) expression. + *

+ * Note, that unlike {@link HashSet#contains}, + * this method might throw {@link ClassCastException} if value is of the wrong class. + * + * @deprecated Use {@link #containsValue} to be explicit about type and intent. + */ + @Override + @SuppressWarnings("unchecked") + public boolean contains(Object value) { + return getByValue((V)value) != null; + } + + /** + * Returns true if this set contains element which matches specified value. + *

+ * This implementation delegates to ({@link #getByValue(Object) getByValue(value)} != null) expression. + */ + public boolean containsValue(V value) { + return getByValue(value) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(Object) getByKey(key)} != null) expression. + */ + public boolean containsKey(K key) { + return getByKey(key) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(int) getByKey(key)} != null) expression. + */ + public boolean containsKey(int key) { + return getByKey(key) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(long) getByKey(key)} != null) expression. + */ + public boolean containsKey(long key) { + return getByKey(key) != null; + } + + /** + * Returns an iterator over the elements in this set. + */ + @Nonnull + @Override + @SuppressWarnings("unchecked") + public Iterator iterator() { + return (Iterator)iterator(IndexedIterator.VALUE_FAILFAST); + } + + /** + * Returns an iterator over the keys of elements in this set. + */ + @SuppressWarnings("unchecked") + public Iterator keyIterator() { + return (Iterator)iterator(IndexedIterator.KEY_FAILFAST); + } + + /** + * Returns an iterator over the entries in this set. + */ + @SuppressWarnings("unchecked") + public Iterator> entryIterator() { + return (Iterator>)iterator(IndexedIterator.ENTRY_FAILFAST); + } + + /** + * Returns concurrent iterator over the elements in this set. + */ + @SuppressWarnings("unchecked") + public Iterator concurrentIterator() { + return (Iterator)iterator(IndexedIterator.VALUE_CONCURRENT); + } + + /** + * Returns an array containing all of the elements in this set. + * Obeys the general contract of the {@link Collection#toArray()} method. + */ + @Nonnull + @Override + public Object[] toArray() { + return core.toArray(null); // Atomic volatile read. + } + + /** + * Returns an array containing all of the elements in this set whose runtime type is that of the specified array. + * Obeys the general contract of the {@link Collection#toArray(Object[])} method. + */ + @Nonnull + @Override + public T[] toArray(T[] a) { + return core.toArray(a); // Atomic volatile read. + } + + /** + * Returns static structure statistics of this set. + */ + public IndexedSetStats getStats() { + return core.getStats(); + } + + // ========== Modification Operations ========== + + /** + * Puts specified element into this set and returns previous element that matches specified one. + */ + public V put(V value) { + return putImpl(core, value); // Atomic volatile read. + } + + /** + * Puts specified element into this set if it is absent and + * returns current element in the set that matches specified one. + * This is equivalent to + *

+	 *   if (set.containsValue(value)) {
+	 *     return set.getByValue(value);
+	 *   } else {
+	 *     set.put(value);
+	 *     return value;
+	 *   }
+	 * 
+ * except that the action is performed atomically if it is properly synchronized. + *

+ * Note, that unlike {@link ConcurrentMap#putIfAbsent}, + * this method returns specified value (not null) if the value was absent. + */ + public V putIfAbsentAndGet(V value) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.getByValue(value); + if (oldValue != null) + return oldValue; + putImpl(core, value); + return value; + } + + /** + * Adds specified element into this set and returns true + * if this operation has increased the size of this set. + *

+ * This implementation adds value using {@link #put(Object) put(value)} method. + */ + @Override + public boolean add(V value) { + return put(value) == null; + } + + /** + * Removes specified element from this set if it is present and returns + * true if this operation has decreased the size of this set. + *

+ * This implementation removes value using {@link #removeValue(Object) removeValue(value)} method. + *

+ * Note, that unlike {@link HashSet#remove}, + * this method might throw {@link ClassCastException} if value is of the wrong class. + */ + @Override + @SuppressWarnings("unchecked") + public boolean remove(Object value) { + return removeValue((V) value) != null; + } + + /** + * Removes the element from this set which matches specified value if it is present + * and returns removed element or null if none were found. + */ + public V removeValue(V value) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeValue(value); + this.core = core; // Atomic volatile write. + return oldValue; + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(K key) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeKey(key); + this.core = core; // Atomic volatile write. + return oldValue; + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(int key) { + return removeKey((long)key); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(long key) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeKey(key); + this.core = core; // Atomic volatile write. + return oldValue; + } + + // ========== Internal Implementation - Helper Instance Methods ========== + + private V putImpl(Core core, V value) { + V oldValue; + if (core.needRehash()) { + // Rehash shall be done before put in order to move away from EMPTY_CORE and protect from bad magic. + // However in situ replacement of existing value shall keep old modCount and avoid rehash. + if (core == Core.EMPTY_CORE || (oldValue = core.put(value, true)) == null) { + core = core.rehash(indexer, 0); + oldValue = core.put(value, false); + } + } else + oldValue = core.put(value, false); + this.core = core; // Atomic volatile write. + return oldValue; + } + + private Iterator iterator(int type) { + Core core = this.core; // Atomic volatile read. + return core.size() == 0 ? IndexedIterator.EMPTY_ITERATOR : new IndexedIterator<>(this, core, type); + } + + void checkModification(Object checkCore, long checkModCount) { + Core core = this.core; // Atomic volatile read. + if (checkCore != core || checkModCount != core.getModCount()) + throw new ConcurrentModificationException(); + } + + void removeIterated(Object checkCore, long checkModCount, boolean concurrent, V lastValue, int lastIndex) { + Core core = this.core; // Atomic volatile read. + if (!concurrent && (checkCore != core || checkModCount != core.getModCount())) + throw new ConcurrentModificationException(); + if (core.getAt(lastIndex) == lastValue) // Atomic read. + core.removeAt(lastIndex, core.getInitialIndexByValue(lastValue)); + else if (concurrent) + core.removeValue(lastValue); + else + throw new ConcurrentModificationException(); + this.core = core; // Atomic volatile write. + } + + private void writeObject(ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + writeCore(out); + } + + void writeCore(ObjectOutputStream out) throws IOException { + core.writeObjectImpl(out); // Atomic volatile read. + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + core = Core.readObjectImpl(indexer, in); // Atomic volatile write. + } + + // ========== Internal Implementation - Core ========== + + /** + * Core class to hold all data of {@link IndexedSet}. + */ + private static final class Core { + static final int QUALITY_BASE = 6; + static final Object REMOVED = new Object(); // Marker object for removed values. + + @SuppressWarnings("unchecked") + static final Core EMPTY_CORE = new Core(value -> null, 0, GOLDEN_RATIO); // Empty core for empty sets. + + static { + EMPTY_CORE.overallSize = EMPTY_CORE.matrix.length; // Special value to trigger rehash before first 'put' operation. + } + + // 'private' fields and methods of Core class shall be accessed only from within Core class itself. + + private final int magic; + private final int shift; + private final IndexerFunction indexer; + private final V[] matrix; + + /** + * Quality is a complex value that tracks quality of this core's payload, + * quality = (total_distance_to_all_payload_values << QUALITY_BASE) + distance_shift, + * where {@code distance_shift} is a current tolerance to the bad payload distance. + * Note, that lower value of quality is BETTER. + * @see #exceed(long) + */ + private long quality; + + private int payloadSize; + private int overallSize; // payloadSize + number_of_REMOVED_values + + private long modCount; // counts structural changes when elements are added or removed (replace is Ok) + private long amortizedCost; // total cost of amortization of all removed and rehashed values, see unamortizedCost() + + @SuppressWarnings("unchecked") + Core(IndexerFunction indexer, int capacity, int magic) { + if (indexer == null) + throw new NullPointerException("Indexer is null."); + this.magic = magic; + shift = getShift(capacity); + this.indexer = indexer; + matrix = (V[])new Object[(-1 >>> shift) + 1]; + quality = QUALITY_BASE + 1; // will rehash when avg_dist > 2, see exceed(...) + } + + /** + * Clones specified core. Implemented as constructor to keep {@link #matrix} field final. + */ + Core(Core source) { + magic = source.magic; + shift = source.shift; + indexer = source.indexer; + matrix = source.matrix.clone(); + quality = source.quality; + payloadSize = source.payloadSize; + overallSize = source.overallSize; + modCount = source.modCount; + amortizedCost = source.amortizedCost; + } + + /** + * Returns increment to this core's {@link #quality} that should be added when new payload + * entry is added at position {@code index} with its initial position at {@code initialIndex}. + */ + private long qualityInc(int index, int initialIndex) { + return ((initialIndex - index) & (-1 >>> shift)) << QUALITY_BASE; + } + + /** + * Returns true if average distance to payload values exceeds + * 1 << (distanceShift - QUALITY_BASE), + * where only last {@link #QUALITY_BASE} bits of distanceShift parameter are used. + * Thus, the method can be directly applied using {@link #quality} itself as an + * {@code distanceShift} argument. + */ + private boolean exceed(long distanceShift) { + // mask total distance bits first + return (quality & (-1L << QUALITY_BASE)) > ((long) payloadSize << distanceShift); + } + + // compute quality tolerance for new instance, so that it rehashes only when it becomes much worse than now + private void computeTolerance() { + while (exceed(quality)) + quality++; + // increment to next tolerance if it is close to exceeding current tolerance + if ((quality & (-1L << QUALITY_BASE)) * 3 > ((long) payloadSize << quality) * 2) + quality++; + } + + /** + * Returns the cost of all put operations to place payload into this core. + * @see #amortizedCost + */ + private long unamortizedCost() { + return (quality >>> QUALITY_BASE) + payloadSize; + } + + private void putValuesIntoEmptyCore(V[] values) { + for (int i = values.length; --i >= 0;) { + V value = values[i]; // Atomic read. + if (value == null || value == REMOVED) + continue; + int index = getInitialIndexByValue(value); + int initialIndex = index; + while (matrix[index] != null) + index = (index - 1) & (-1 >>> shift); + matrix[index] = value; + quality += qualityInc(index, initialIndex); + payloadSize++; + overallSize++; + // Check if there are too many elements in the source. + // Error may happen either if source state is broken + // or if elements are added to source concurrently. + // Ignoring such error here will lead to a dead loop above. + if (overallSize > (THRESHOLD_UP >>> shift)) + throw new ConcurrentModificationException("Concurrent modification during rehash"); + } + } + + private Core rehashInternal(IndexerFunction indexer, int capacity) { + /* GENERAL DESCRIPTION OF REHASH ALGORITHM: + 1. Try to rehash at most 4 times. Twice at regular capacity, once at 2x capacity, and once at 4x capacity. + 2. First attempt can keep old magic if previous distance is good enough, other attempts use random magic. + 3. If the first attempt immediately satisfies perfect limits then return. + 4. If we have to make additional attempts, then the best result is picked. + In this case result is considered acceptable if it satisfies consequently worse limits. + 5. After four attempts the best result is returned even if it is unacceptable by the above rules. + */ + capacity = Math.min(Math.max(capacity, payloadSize), MAX_CAPACITY); + long totalCost = amortizedCost + unamortizedCost(); + Core result = new Core<>(indexer, capacity, exceed(QUALITY_BASE + 1) ? nextMagic(magic, capacity) : magic); + result.putValuesIntoEmptyCore(matrix); + totalCost += result.unamortizedCost(); + if (result.exceed(QUALITY_BASE + 1)) // only if quality is not very good + for (int k = 0; k < 3; k++) { + Core other = new Core<>(indexer, capacity, nextMagic(magic, capacity)); + other.putValuesIntoEmptyCore(matrix); + totalCost += other.unamortizedCost(); + if (other.quality < result.quality) // lower quality is better + result = other; + if (!result.exceed(QUALITY_BASE + 2 + k)) + break; // break when we have acceptable quality + capacity = Math.min(capacity * 2, MAX_CAPACITY); + } + result.computeTolerance(); + // update result stats + result.modCount = modCount; + result.amortizedCost = totalCost - result.unamortizedCost(); + return result; + } + + Core rehash(IndexerFunction indexer, int capacity) { + long modCount = this.modCount; // Atomic read. + Core result = rehashInternal(indexer, capacity); + if (modCount != this.modCount) // Atomic read. + throw new ConcurrentModificationException("Concurrent modification during rehash"); + return result; + } + + boolean needRehash() { + return overallSize > (THRESHOLD_UP >>> shift) || exceed(quality); + } + + Core rehashIfNeeded(IndexerFunction indexer, int capacity) { + return needRehash() ? + rehash(indexer, capacity) : this; + } + + Core ensureCapacity(IndexerFunction indexer, int capacity) { + return capacity > (THRESHOLD_UP >>> shift) && shift > MIN_SHIFT ? + rehash(indexer, capacity) : this; + } + + Core trimToSize(IndexerFunction indexer) { + return payloadSize < (THRESHOLD_DOWN >>> shift) && shift < MAX_SHIFT ? + rehash(indexer, 0) : this; + } + + Core clear() { + if (this == EMPTY_CORE) + return this; + for (int i = matrix.length; --i >= 0;) + matrix[i] = null; + modCount += payloadSize; + amortizedCost += unamortizedCost(); + quality = QUALITY_BASE + 1; + payloadSize = 0; + overallSize = 0; + return this; + } + + int size() { + return payloadSize; // Atomic read. + } + + long getModCount() { + return modCount; // Atomic read. + } + + int getInitialIndexByValue(V value) { + return (indexer.hashCodeByValue(value) * magic) >>> shift; + } + + V getByValue(V value) { + int index = getInitialIndexByValue(value); + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V getByKey(K key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V getByKey(long key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + @SuppressWarnings("unchecked") + V put(V value, boolean replaceOnly) { + // These are sanity checks - they can be removed once testing completed. + assert this != EMPTY_CORE : "Putting into EMPTY core."; + assert value != REMOVED : "Value is an internal special marker object."; + + if (value == null) + throw new NullPointerException("Value is null."); + int index = getInitialIndexByValue(value); + int initialIndex = index; + int removedIndex = -1; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) { + matrix[index] = value; + return testValue; + } + if (testValue == REMOVED && removedIndex < 0) + removedIndex = index; + index = (index - 1) & (-1 >>> shift); + } + if (replaceOnly) + return null; + if (removedIndex < 0) { + matrix[index] = value; + overallSize++; + } else + matrix[index = removedIndex] = value; + quality += qualityInc(index, initialIndex); + payloadSize++; + modCount++; + return null; + } + + V removeValue(V value) { + int index = getInitialIndexByValue(value); + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V removeKey(K key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V removeKey(long key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + int getMaxIndex() { + return matrix.length - 1; + } + + V getAt(int index) { + return matrix[index]; + } + + @SuppressWarnings("unchecked") + void removeAt(int index, int initialIndex) { + matrix[index] = (V)REMOVED; + quality -= qualityInc(index, initialIndex); + payloadSize--; + if (matrix[(index - 1) & (-1 >>> shift)] == null) + while (matrix[index] == REMOVED) { + matrix[index] = null; + overallSize--; + index = (index + 1) & (-1 >>> shift); + } + modCount++; + // we paid twice -- first adding this element, then removing it + amortizedCost += 2 * ((qualityInc(index, initialIndex) >>> QUALITY_BASE) + 1); + } + + @SuppressWarnings("unchecked") + T[] toArray(T[] a) { + // If (a == null) then returned array shall be of exact length, otherwise it can be larger. + int size = payloadSize; // Atomic read. + Object[] result = a == null ? new Object[size] : a.length >= size ? a : + (Object[])Array.newInstance(a.getClass().getComponentType(), size); + int n = 0; + for (int i = matrix.length; --i >= 0;) { + Object value = matrix[i]; // Atomic read. + if (value == null || value == REMOVED) + continue; + if (n >= result.length) { + // More elements were added concurrently. Enlarge result array. + // Do not grow more than twice. + // Do not grow more than possible remaining elements (i + 1). + // Do not fail when (n == 0). + Object[] tmp = (Object[])Array.newInstance(result.getClass().getComponentType(), n + Math.min(n, i) + 1); + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + result[n++] = value; + } + if (n < result.length && a == null) { + // Shrink allocated array to exact size. + Object[] tmp = new Object[n]; + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + if (n < result.length) + result[n] = null; + return (T[])result; + } + + void writeObjectImpl(ObjectOutputStream out) throws IOException { + int n = payloadSize; // Atomic read. + // if (n == 0) then empty set, no elements written + // if (n > 0) then fixed set with exactly n elements written + // if (n < 0) then dynamic set with approximately (-n) elements plus marker null element written + out.writeInt(n); + for (int i = matrix.length; --i >= 0;) { + Object value = matrix[i]; // Atomic read. + if (value != null && value != REMOVED && n-- > 0) // Do not write more than n values anyway. + out.writeObject(value); + } + if (n != 0) + throw new IOException("Concurrent modification detected."); + } + + @SuppressWarnings("unchecked") + static Core readObjectImpl(IndexerFunction indexer, ObjectInputStream in) throws IOException, ClassNotFoundException { + int n = in.readInt(); + // if (n == 0) then empty set, no elements written + // if (n > 0) then fixed set with exactly n elements written + // if (n < 0) then dynamic set with approximately (-n) elements plus marker null element written + if (n == 0) + return (Core)EMPTY_CORE; + Core core = new Core<>(indexer, Math.abs(n), GOLDEN_RATIO); + if (n > 0) + for (int i = 0; i < n; i++) { + core = core.rehashIfNeeded(indexer, n); // to protect from bad magic + core.put((V)in.readObject(), false); + } + else + for (V value; (value = (V)in.readObject()) != null;) { + core = core.rehashIfNeeded(indexer, -n); // to protect from bad magic + core.put(value, false); + } + return core; + } + + IndexedSetStats getStats() { + return new IndexedSetStats(payloadSize, matrix.length, quality >>> QUALITY_BASE, amortizedCost + unamortizedCost(), modCount); + } + } + + // ========== Internal Implementation - Iterator ========== + + /** + * Asynchronous iterator over {@link IndexedSet}. + */ + private static final class IndexedIterator implements Iterator { + static final int VALUE_CONCURRENT = 0; + static final int VALUE_FAILFAST = 1; + static final int KEY_FAILFAST = 2; + static final int ENTRY_FAILFAST = 3; + + @SuppressWarnings("unchecked") + static final Iterator EMPTY_ITERATOR = new IndexedIterator(null, Core.EMPTY_CORE, VALUE_CONCURRENT); + + // 'private' fields and methods of IndexedIterator class shall be accessed only from within IndexedIterator class itself. + + private final IndexedSet set; + private final Core core; + private final int type; + + private long modCount; + + private V nextValue; + private int nextIndex; + private V lastValue; + private int lastIndex; + + IndexedIterator(IndexedSet set, Core core, int type) { + this.set = set; + this.core = core; + this.type = type; + modCount = core.getModCount(); + nextIndex = core.getMaxIndex() + 1; + fillNext(); + } + + private void fillNext() { + if (type != VALUE_CONCURRENT) + set.checkModification(core, modCount); + while (--nextIndex >= 0) { + nextValue = core.getAt(nextIndex); // Atomic read. + if (nextValue != null && nextValue != Core.REMOVED) + return; + } + nextValue = null; // No more elements - clear leftover state. + } + + @Override + public boolean hasNext() { + return nextValue != null; + } + + @Override + public Object next() { + if (nextValue == null) + throw new NoSuchElementException(); + lastValue = nextValue; + lastIndex = nextIndex; + fillNext(); + if (type == KEY_FAILFAST) + return set.getIndexerFunction().getObjectKey(lastValue); + if (type == ENTRY_FAILFAST) + return new IndexedEntry<>(set, lastValue); + return lastValue; + } + + @Override + public void remove() { + if (lastValue == null) + throw new IllegalStateException(); + set.removeIterated(core, modCount, type == VALUE_CONCURRENT, lastValue, lastIndex); + modCount = core.getModCount(); + lastValue = null; + } + } + + // ========== Internal Implementation - Entry ========== + + /** + * IndexedEntry class is a wrapper to convert indexed API to collections API. + */ + private static final class IndexedEntry implements Map.Entry { + // 'private' fields and methods of IndexedEntry class shall be accessed only from within IndexedEntry class itself. + + private final IndexedSet set; + private V value; + + IndexedEntry(IndexedSet set, V value) { + this.set = set; + this.value = value; + } + + @Override + public K getKey() { + return set.getIndexerFunction().getObjectKey(value); + } + + @Override + public V getValue() { + return value; + } + + @Override + public V setValue(V value) { + if (value == null) + throw new NullPointerException("Value is null."); + V oldValue = this.value; + if (!set.getIndexerFunction().matchesByValue(value, oldValue)) + throw new IllegalArgumentException("New value does not match old value."); + set.put(this.value = value); + return oldValue; + } + + public boolean equals(Object obj) { + if (!(obj instanceof Map.Entry)) + return false; + Map.Entry e = (Map.Entry)obj; + Object key = getKey(); + Object ekey = e.getKey(); + return (key == null ? ekey == null : key.equals(ekey)) && value.equals(e.getValue()); + } + + public int hashCode() { + K key = getKey(); + return (key == null ? 0 : key.hashCode()) ^ value.hashCode(); + } + + public String toString() { + return getKey() + "=" + value; + } + } + + // ========== Internal Implementation - Helper Static Constants and Methods ========== + + /* + * This section contains constants and methods to support matrix-based data structures. + * Such data structures and related algorithms are also known as "direct linear probe hashing". + * The code below is a copy-paste from com.devexperts.qd.impl.matrix.Hashing class. + */ + + static final int THRESHOLD_UP = (int)((1L << 32) * 5 / 9); + static final int THRESHOLD_DOWN = (int)((1L << 32) * 5 / 27); + + static final int THRESHOLD_ALLOC_UP = (int)((1L << 32) * 4 / 9); + static final int MAX_SHIFT = 29; + static final int MIN_SHIFT = 2; + static final int MAX_CAPACITY = THRESHOLD_ALLOC_UP >>> MIN_SHIFT; + + /** + * Calculates appropriate 'shift' for specified capacity. + */ + static int getShift(int capacity) { + int shift = MAX_SHIFT; + while ((THRESHOLD_ALLOC_UP >>> shift) < capacity && shift >= MIN_SHIFT) + shift--; + if (shift < MIN_SHIFT) + throw new IllegalArgumentException("Capacity is too large: " + capacity); + return shift; + } + + private static final int GOLDEN_RATIO = 0x9E3779B9; + private static final int MAGIC = 0xC96B5A35; + private static int magicSeed = (int)(System.currentTimeMillis() * Runtime.getRuntime().freeMemory()); + + /** + * Generates next MAGIC number with proper distribution and difference of bits. + */ + static int nextMagic(int prevMagic) { + // Generate next pseudo-random number with lowest bit set to '1'. + int magic = (magicSeed = magicSeed * MAGIC + 1) | 1; + // Enforce that any 4 bits are neither '0000' nor '1111'. + // Start earlier to enforce that highest 2 bits are neither '00' nor '11'. + for (int i = 31; --i >= 0;) { + int bits = (magic >> i) & 0x0F; + if (bits == 0 || bits == 0x0F) { + magic ^= 1 << i; + i -= 2; + } + } + // Recover cleared lowest bit. + if ((magic & 1) == 0) + magic ^= 3; // Convert '10' (the only possible case) into '01'. + // Enforce that any 8 bits have at least 1 difference from previous number. + for (int i = 25; --i >= 0;) { + if ((((magic ^ prevMagic) >> i) & 0xFF) == 0) { + // Reverse bit i+1 and enforce that bit i+2 differs from it. + // This may lead to 4-bit (but not longer) sequences of '0' or '1'. + magic ^= ((magic ^ (magic << 1)) & (4 << i)) ^ (2 << i); + i -= 6; + } + } + return magic; + } + + /** + * Generates next MAGIC number by selecting best one from several candidates. + * Number of checked candidates depends on specified capacity. + */ + static int nextMagic(int prevMagic, int capacity) { + int magic = nextMagic(prevMagic); + if (capacity < 32) + return magic; + double eval = evaluateContinuedFraction(magic); + int attempts = 30 - Integer.numberOfLeadingZeros(capacity); + for (int i = 0; i < attempts; i++) { + int m = nextMagic(prevMagic); + double e = evaluateContinuedFraction(m); + if (e > eval) { + magic = m; + eval = e; + } + } + return magic; + } + + /** + * Evaluates quality of specified MAGIC number as a minimal normalized distance + * to rational approximations generated by continued fraction. + * The larger distance - the better magic. + */ + static double evaluateContinuedFraction(int magic) { + // for explanation of continued fraction look at https://en.wikipedia.org/wiki/Continued_fraction + // 'x' is a fractional representation of magic scaled into a range (0, 1); both bounds exclusive + // 'rem' is a current remainder to compute next continued fraction coefficient; it's in a range [0, 1) + // 'a' is a current continued fraction coefficient - aka a[i]; it's always a natural number + // 'p/q' is a current rational approximation of 'x' with an error less than 1/q^2 + // (p1,q1) and (p2,q2) are previous (p,q) approximations - aka (p[i-1],q[i-1]) and (p[i-2],q[i-2]) + // 'grade' is a minimal (worst) distance from 'x' to it's approximations normalized by q^2 + double x = (double)(magic & 0xFFFFFFFFL) / (1L << 32); + double rem = x; + long p2 = 1; + long q2 = 0; + long p1 = 0; + long q1 = 1; + double grade = x; + for (int i = 1; i <= 20; i++) { + rem = 1 / rem; + long a = (long)rem; + rem -= a; + long p = a * p1 + p2; + long q = a * q1 + q2; + p2 = p1; + q2 = q1; + p1 = p; + q1 = q; + grade = Math.min(grade, Math.abs(x * q - p) * q); + if (grade < 1e-6 || rem < 1e-6 || q > (1 << 20)) + break; + } + return grade; + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java new file mode 100644 index 0000000000..801e091875 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java @@ -0,0 +1,69 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Locale; + +/** + * Provides access to statistics of the {@link IndexedSet} static structure. + * Statistics are tracked only during modification operations. + * It has self-explanatory {@link #toString()} method that can be used to periodically dump + * information about important caches that are based on the {@code IndexedSet}. + */ +public class IndexedSetStats implements Serializable { + private static final long serialVersionUID = 0; + + private final int payload_size; + private final int allocated_size; + private final long payload_distance; + private final long amortized_cost; + private final long mod_count; + + IndexedSetStats(int payload_size, int allocated_size, long payload_distance, long amortized_cost, long mod_count) { + this.payload_size = payload_size; + this.allocated_size = allocated_size; + this.payload_distance = payload_distance; + this.amortized_cost = amortized_cost; + this.mod_count = mod_count; + } + + public int getSize() { + return payload_size; + } + + public int getAllocatedSize() { + return allocated_size; + } + + public double getFillFactor() { + return (double)payload_size / allocated_size; + } + + public double getAverageDistance() { + return payload_distance == 0 ? 0 : (double)payload_distance / payload_size; + } + + public double getAmortizedCost() { + return amortized_cost == 0 ? 0 : (double)amortized_cost / payload_size; + } + + public long getModCount() { + return mod_count; + } + + @Override + public String toString() { + return String.format(Locale.US, "size %d, filled %.1f%%, avgdist %.3f, amortized %.3f, mods %d", + getSize(), getFillFactor() * 100, getAverageDistance(), getAmortizedCost(), getModCount()); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java b/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java new file mode 100644 index 0000000000..ab792a3578 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java @@ -0,0 +1,110 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; + +/** + * A strategy that distinguishes and identifies elements in an {@link IndexedSet} and {@link IndexedMap}. + * + *

The Indexer is {@link Serializable}, so that all concrete subclasses + * shall be serializable in order to support serialization of indexed set and map.. + * + * @deprecated Use a functional interface {@link IndexerFunction} instead. + */ +@Deprecated +public abstract class Indexer implements IndexerFunction { + private static final long serialVersionUID = 0L; + + /** + * Default strategy that treats values as their own keys (key == value) and delegates to + * {@link Object#hashCode() Object.hashCode()} and {@link Object#equals(Object) Object.equals(Object)} + * methods as appropriate. This strategy does not support primitive keys. + * + *

This strategy basically turns {@link IndexedSet} into plain hash set of objects and {@link IndexedMap} + * into a self-reference mapping. + */ + @SuppressWarnings("rawtypes") + public static final Indexer DEFAULT = new DefaultIndexer(); + + // ========== Standard Subclasses ========== + + /** + * Default strategy that treats values as their own keys (key == value). + */ + @SuppressWarnings("rawtypes") + static final class DefaultIndexer extends Indexer { + private static final long serialVersionUID = 0; + + DefaultIndexer() {} + + @Override + public Object getObjectKey(Object value) { + return value; + } + + @SuppressWarnings("ReadResolveAndWriteReplaceProtected") + public Object readResolve() { + return Indexer.DEFAULT; + } + } + + static class DelegateIndexer extends Indexer { + private static final long serialVersionUID = 0L; + + private final IndexerFunction indexer; + + DelegateIndexer(IndexerFunction indexer) { + this.indexer = indexer; + } + + @Override + public K getObjectKey(V value) { + return indexer.getObjectKey(value); + } + + @Override + public int hashCodeByKey(K key) { + return indexer.hashCodeByKey(key); + } + + @Override + public boolean matchesByKey(K key, V value) { + return indexer.matchesByKey(key, value); + } + + @Override + public int hashCodeByValue(V value) { + return indexer.hashCodeByValue(value); + } + + @Override + public boolean matchesByValue(V newValue, V oldValue) { + return indexer.matchesByValue(newValue, oldValue); + } + + @Override + public long getNumberKey(V value) { + return indexer.getNumberKey(value); + } + + @Override + public int hashCodeByKey(long key) { + return indexer.hashCodeByKey(key); + } + + @Override + public boolean matchesByKey(long key, V value) { + return indexer.matchesByKey(key, value); + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java new file mode 100644 index 0000000000..fcf886619e --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java @@ -0,0 +1,354 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; + +/** + * A strategy that distinguishes and identifies elements in an {@link IndexedSet} and {@link IndexedMap}. + * The IndexerFunction defines 3 equivalent ways to identify elements: + *

    + *
  • by value - mandatory and primary method to identify element by itself + *
  • by object key - optional method that identifies elements using object key + *
  • by number key - optional method that identifies elements using number key + *
+ * + *

The IndexerFunction is not restricted to use explicit key concept for identification. + * Identity of an element may be defined by a number of attributes, specified in a value itself, + * in a template object, in a formal key object, or encoded in a number key. The IndexerFunction + * may use all these ways interchangeable to distinguish and identify elements. + * + *

Being a strategy, the IndexerFunction is required to be stateless, concurrent and thread-safe. + * + *

The IndexerFunction is a functional interface with a sole abstract method that shall be implemented + * in order to use identification using explicit object key - no other methods are required to be + * overridden in such simple cases. + * There are two other functional interfaces {@link IndexerFunction.IntKey} and {@link IndexerFunction.LongKey} + * which are similarly designed with sole abstract methods to simplify identification using explicit number keys. + * There is also a functional interface {@link IndexerFunction.IdentityKey} which is similarly designed + * with sole abstract method for cases when explicit object keys must be compared by reference rather than + * using their {@link Object#equals(Object) equals} method. + * + *

The IndexerFunction is {@link Serializable}, so that all concrete subclasses + * shall be serializable in order to support serialization of indexed set and map. + */ +@FunctionalInterface +public interface IndexerFunction extends Serializable { + + /** + * Default strategy that treats values as their own keys (key == value) and delegates to + * {@link Object#hashCode() Object.hashCode()} and {@link Object#equals(Object) Object.equals(Object)} + * methods as appropriate. This strategy does not support primitive keys. + * + *

This strategy basically turns {@link IndexedSet} into plain hash set of objects and {@link IndexedMap} + * into a self-reference mapping. + */ + @SuppressWarnings("rawtypes") + public static final IndexerFunction DEFAULT = new DefaultIndexerFunction(); + + // ========== Object Key Operations ========== + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + */ + public K getObjectKey(V value); + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == null ? 0 : key.{@link Object#hashCode() hashCode}()) expression. + */ + public default int hashCodeByKey(K key) { + return key == null ? 0 : key.hashCode(); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == null ? {@link #getObjectKey(Object) getObjectKey}(value) == null : key.{@link Object#equals(Object) equals}({@link #getObjectKey(Object) getObjectKey}(value))) expression. + */ + public default boolean matchesByKey(K key, V value) { + return key == null ? getObjectKey(value) == null : key.equals(getObjectKey(value)); + } + + // ========== Value Operations ========== + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(Object) hashCodeByKey}({@link #getObjectKey(Object) getObjectKey}(value)) expression. + */ + public default int hashCodeByValue(V value) { + return hashCodeByKey(getObjectKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * {@link #matchesByKey(Object, Object) matchesByKey}({@link #getObjectKey(Object) getObjectKey}(newValue), oldValue) expression. + */ + public default boolean matchesByValue(V newValue, V oldValue) { + return matchesByKey(getObjectKey(newValue), oldValue); + } + + // ========== Number Key Operations (Optional) ========== + + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(((Number){@link #getObjectKey(Object) getObjectKey}(value)).{@link Number#longValue() longValue}()) expression. + */ + public default long getNumberKey(V value) { + return hashCodeByKey(((Number)getObjectKey(value)).longValue()); + } + + /** + * Returns hash code for specified number key; called when performing operations using long keys. + * + *

This implementation delegates to + * Long.{@link Long#hashCode(long) hashCode}(key) expression. + */ + public default int hashCodeByKey(long key) { + return Long.hashCode(key); + } + + /** + * Determines if specified number key matches specified value; called when performing operations using number keys. + * + *

This implementation delegates to + * (key == {@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + public default boolean matchesByKey(long key, V value) { + return key == getNumberKey(value); + } + + /** + * An {@link IndexerFunction} that distinguishes and identifies elements using int keys. + * + *

It assumes that elements are fully identifiable by plain numeric identifier and treats object keys as a mere wrappers. + * The hash function is computed by taking int key value. + */ + @FunctionalInterface + public interface IntKey extends IndexerFunction { + /** + * Returns number key for specified value to be used for hashing and identification. + */ + public int getIntKey(V value); + + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getIntKey(Object) getIntKey}(value) expression. + */ + @Override + public default long getNumberKey(V value) { + return getIntKey(value); + } + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}({@link #getIntKey(Object) getIntKey}(value)) expression. + */ + @Override + public default int hashCodeByValue(V value) { + return hashCodeByKey(getIntKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * ({@link #getIntKey(Object) getIntKey}(newValue) == {@link #getIntKey(Object) getIntKey}(oldValue)) expression. + */ + @Override + public default boolean matchesByValue(V newValue, V oldValue) { + return getIntKey(newValue) == getIntKey(oldValue); + } + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getIntKey(Object) getIntKey}(value) expression. + */ + @Override + public default Integer getObjectKey(V value) { + return getIntKey(value); + } + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(key.{@link Integer#intValue() intValue}()) expression. + */ + @Override + public default int hashCodeByKey(Integer key) { + return hashCodeByKey(key.intValue()); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getIntKey(Object) getIntKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(Integer key, V value) { + return key == getIntKey(value); + } + } + + /** + * An {@link IndexerFunction} that distinguishes and identifies elements using long keys. + * + *

It assumes that elements are fully identifiable by plain numeric identifier and treats object keys as a mere wrappers. + * The hash function is computed using {@link Long#hashCode(long) Long.hashCode}(key) expression. + */ + @FunctionalInterface + public interface LongKey extends IndexerFunction { + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + */ + @Override + public long getNumberKey(V value); + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}({@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + @Override + public default int hashCodeByValue(V value) { + return hashCodeByKey(getNumberKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * ({@link #getNumberKey(Object) getNumberKey}(newValue) == {@link #getNumberKey(Object) getNumberKey}(oldValue)) expression. + */ + @Override + public default boolean matchesByValue(V newValue, V oldValue) { + return getNumberKey(newValue) == getNumberKey(oldValue); + } + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getNumberKey(Object) getNumberKey}(value) expression. + */ + @Override + public default Long getObjectKey(V value) { + return getNumberKey(value); + } + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(key.{@link Long#longValue() longValue}()) expression. + */ + @Override + public default int hashCodeByKey(Long key) { + return hashCodeByKey(key.longValue()); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(Long key, V value) { + return key == getNumberKey(value); + } + } + + /** + * A specialized {@link IndexerFunction} that distinguishes and identifies elements using identity comparison of object keys. + * + *

It uses {@link System#identityHashCode(Object) System.identityHashCode(Object)} method instead of + * {@link Object#hashCode() Object.hashCode()} method to compute hashcode and reference comparison + * instead of {@link Object#equals(Object) Object.equals(Object)} method to determine identity. + * + *

In order to use this functional interface, cast a lambda expression to it when creating {@link IndexedSet}. For example,
+ * IndexedSet<Key, Value> set = IndexedSet.{@link IndexedSet#create(IndexerFunction) create}((IndexerFunction.IdentityKey<Key, Value>)Value::getKey); + */ + @FunctionalInterface + public interface IdentityKey extends IndexerFunction { + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * System.{@link System#identityHashCode(Object) identityHashCode}(key) expression. + */ + @Override + public default int hashCodeByKey(K key) { + return System.identityHashCode(key); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getObjectKey(Object) getObjectKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(K key, V value) { + return key == getObjectKey(value); + } + } + + /** + * Default strategy that treats values as their own keys (key == value). + */ + @SuppressWarnings("rawtypes") + static final class DefaultIndexerFunction implements IndexerFunction { + private static final long serialVersionUID = 0; + + DefaultIndexerFunction() {} + + @Override + public Object getObjectKey(Object value) { + return value; + } + + // Substitute DefaultIndexer implementation for backward compatibility + private Object writeReplace() { + return Indexer.DEFAULT; + } + + private Object readResolve() { + return IndexerFunction.DEFAULT; + } + } + +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java b/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java new file mode 100644 index 0000000000..e473ba8cd9 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java @@ -0,0 +1,233 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Comparator; +import java.util.Objects; +import java.util.function.IntFunction; +import java.util.function.IntToDoubleFunction; +import java.util.function.IntToLongFunction; +import java.util.function.IntUnaryOperator; + +/** + * A comparison function, which imposes a total ordering on some collection of ints. + * Comparators can be passed to a sort method (such as {@link QuickSort#sort(int[], IntComparator) QuickSort.sort}) + * to allow precise control over the sort order. + * + *

The purpose of this function is to allow non-trivial ordering of ints which depend on some external data. + * For example when ints are some identifiers (pseudo-references) of actual data. + */ +@SuppressWarnings("UnusedDeclaration") +public interface IntComparator { + /** + * Compares its two arguments for order. Returns a negative integer, zero, or a positive integer + * as the first argument is less than, equal to, or greater than the second. + * + * @param i1 the first int to be compared. + * @param i2 the second int to be compared. + * @return a negative integer, zero, or a positive integer as the first argument is + * less than, equal to, or greater than the second. + */ + public int compare(int i1, int i2); + + /** + * Returns a comparator that imposes the reverse ordering of this comparator. + * + * @return a comparator that imposes the reverse ordering of this comparator. + */ + public default IntComparator reversed() { + return (IntComparator & Serializable) (i1, i2) -> compare(i2, i1); + } + + /** + * Returns a lexicographic-order comparator with another comparator. + * If this comparator considers two elements equal, i.e. {@code compare(i1, i2) == 0}, + * then other comparator is used to determine the order. + * + *

The returned comparator is serializable if the specified comparator is also serializable. + * + * @param other the other comparator to be used when this comparator compares two ints that are equal. + * @return a lexicographic-order comparator composed of this comparator and then the other comparator. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparing(IntComparator other) { + Objects.requireNonNull(other); + return (IntComparator & Serializable) (i1, i2) -> { + int res = compare(i1, i2); + return res != 0 ? res : other.compare(i1, i2); + }; + } + + /** + * Returns a lexicographic-order comparator with a function that extracts + * a sort key to be compared with the given sort key comparator. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparing(IntFunction, Comparator) comparing}(keyExtractor, keyComparator)) expression. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public default IntComparator thenComparing(IntFunction keyExtractor, Comparator keyComparator) { + return thenComparing(comparing(keyExtractor, keyComparator)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a comparable sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparing(IntFunction) comparing}(keyExtractor)) expression. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public default > IntComparator thenComparing(IntFunction keyExtractor) { + return thenComparing(comparing(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts an int sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingInt(IntUnaryOperator) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingInt(IntUnaryOperator keyExtractor) { + return thenComparing(comparingInt(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a long sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingLong(IntToLongFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingLong(IntToLongFunction keyExtractor) { + return thenComparing(comparingLong(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a double sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingDouble(IntToDoubleFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing and extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingDouble(IntToDoubleFunction keyExtractor) { + return thenComparing(comparingDouble(keyExtractor)); + } + + /** + * Accepts a function that extracts a sort key and a sort key comparator, and returns + * a comparator that compares by an extracted sort key using the specified sort key comparator. + * + *

The returned comparator is serializable if the specified function and comparator are both serializable. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a comparator that compares by an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public static IntComparator comparing(IntFunction keyExtractor, Comparator keyComparator) { + Objects.requireNonNull(keyExtractor); + Objects.requireNonNull(keyComparator); + return (IntComparator & Serializable) + (i1, i2) -> keyComparator.compare(keyExtractor.apply(i1), keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts a comparable sort, and returns + * a comparator that compares by an extracted comparable sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a comparator that compares by an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public static > IntComparator comparing(IntFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> keyExtractor.apply(i1).compareTo(keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts an int sort key, and returns + * a comparator that compares by an extracted int sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a comparator that compares by an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingInt(IntUnaryOperator keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Integer.compare(keyExtractor.applyAsInt(i1), keyExtractor.applyAsInt(i2)); + } + + /** + * Accepts a function that extracts a long sort key, and returns + * a comparator that compares by an extracted long sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a comparator that compares by an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingLong(IntToLongFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Long.compare(keyExtractor.applyAsLong(i1), keyExtractor.applyAsLong(i2)); + } + + /** + * Accepts a function that extracts a double sort key, and returns + * a comparator that compares by an extracted double sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a comparator that compares by an extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingDouble(IntToDoubleFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Double.compare(keyExtractor.applyAsDouble(i1), keyExtractor.applyAsDouble(i2)); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java b/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java new file mode 100644 index 0000000000..1323f8e643 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java @@ -0,0 +1,233 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Comparator; +import java.util.Objects; +import java.util.function.LongFunction; +import java.util.function.LongToDoubleFunction; +import java.util.function.LongToIntFunction; +import java.util.function.LongUnaryOperator; + +/** + * A comparison function, which imposes a total ordering on some collection of longs. + * Comparators can be passed to a sort method (such as {@link QuickSort#sort(long[], LongComparator) QuickSort.sort}) + * to allow precise control over the sort order. + * + *

The purpose of this function is to allow non-trivial ordering of longs which depend on some external data. + * For example when longs are some identifiers (pseudo-references) of actual data. + */ +@SuppressWarnings("UnusedDeclaration") +public interface LongComparator { + /** + * Compares its two arguments for order. Returns a negative integer, zero, or a positive integer + * as the first argument is less than, equal to, or greater than the second. + * + * @param i1 the first long to be compared. + * @param i2 the second long to be compared. + * @return a negative integer, zero, or a positive integer as the first argument is + * less than, equal to, or greater than the second. + */ + public int compare(long i1, long i2); + + /** + * Returns a comparator that imposes the reverse ordering of this comparator. + * + * @return a comparator that imposes the reverse ordering of this comparator. + */ + public default LongComparator reversed() { + return (LongComparator & Serializable) (i1, i2) -> compare(i2, i1); + } + + /** + * Returns a lexicographic-order comparator with another comparator. + * If this comparator considers two elements equal, i.e. {@code compare(i1, i2) == 0}, + * then other comparator is used to determine the order. + * + *

The returned comparator is serializable if the specified comparator is also serializable. + * + * @param other the other comparator to be used when this comparator compares two longs that are equal. + * @return a lexicographic-order comparator composed of this comparator and then the other comparator. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparing(LongComparator other) { + Objects.requireNonNull(other); + return (LongComparator & Serializable) (i1, i2) -> { + int res = compare(i1, i2); + return res != 0 ? res : other.compare(i1, i2); + }; + } + + /** + * Returns a lexicographic-order comparator with a function that extracts + * a sort key to be compared with the given sort key comparator. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparing(LongFunction, Comparator) comparing}(keyExtractor, keyComparator)) expression. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public default LongComparator thenComparing(LongFunction keyExtractor, Comparator keyComparator) { + return thenComparing(comparing(keyExtractor, keyComparator)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a comparable sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparing(LongFunction) comparing}(keyExtractor)) expression. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public default > LongComparator thenComparing(LongFunction keyExtractor) { + return thenComparing(comparing(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts an int sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingInt(LongToIntFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingInt(LongToIntFunction keyExtractor) { + return thenComparing(comparingInt(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a long sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingLong(LongUnaryOperator) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingLong(LongUnaryOperator keyExtractor) { + return thenComparing(comparingLong(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a double sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingDouble(LongToDoubleFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing and extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingDouble(LongToDoubleFunction keyExtractor) { + return thenComparing(comparingDouble(keyExtractor)); + } + + /** + * Accepts a function that extracts a sort key and a sort key comparator, and returns + * a comparator that compares by an extracted sort key using the specified sort key comparator. + * + *

The returned comparator is serializable if the specified function and comparator are both serializable. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a comparator that compares by an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public static LongComparator comparing(LongFunction keyExtractor, Comparator keyComparator) { + Objects.requireNonNull(keyExtractor); + Objects.requireNonNull(keyComparator); + return (LongComparator & Serializable) + (i1, i2) -> keyComparator.compare(keyExtractor.apply(i1), keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts a comparable sort, and returns + * a comparator that compares by an extracted comparable sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a comparator that compares by an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public static > LongComparator comparing(LongFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> keyExtractor.apply(i1).compareTo(keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts an int sort key, and returns + * a comparator that compares by an extracted int sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a comparator that compares by an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingInt(LongToIntFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Integer.compare(keyExtractor.applyAsInt(i1), keyExtractor.applyAsInt(i2)); + } + + /** + * Accepts a function that extracts a long sort key, and returns + * a comparator that compares by an extracted long sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a comparator that compares by an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingLong(LongUnaryOperator keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Long.compare(keyExtractor.applyAsLong(i1), keyExtractor.applyAsLong(i2)); + } + + /** + * Accepts a function that extracts a double sort key, and returns + * a comparator that compares by an extracted double sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a comparator that compares by an extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingDouble(LongToDoubleFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Double.compare(keyExtractor.applyAsDouble(i1), keyExtractor.applyAsDouble(i2)); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java b/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java new file mode 100644 index 0000000000..6532cd1df0 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java @@ -0,0 +1,690 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.util.Comparator; +import java.util.List; + +/** + * This class implements modified version of Quick Sort algorithm. + * This implementation offers O(n*log(n)) performance on many data sets + * that cause other quick sort algorithms to degrade to quadratic performance. + * + *

The notable differences of this Quick Sort from other sorting algorithms are: + *

    + *
  • it is unstable - it can re-arrange equal elements in any order; + *
  • it is robust - it can withstand unstable ordering of elements, + * for example if ordering changes during sorting; + *
  • it is garbage-free - it does not allocate any temporary objects. + *
+ * + *

In the case of unstable ordering the result of this algorithm is not necessarily fully sorted, + * but it is guaranteed to complete in a finite amount of time and without exceptions. + * The result in this case would be partially sorted to the best of algorithm's ability. + */ +public class QuickSort { + + /** + * Sorts the specified list into ascending order according + * to the {@linkplain Comparable natural ordering} of its elements. + * All elements in the list must implement the {@link Comparable} interface. + * Furthermore, all elements in the list must be mutually comparable. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @throws ClassCastException if the list contains elements that are not mutually comparable. + */ + public static > void sort(List list) { + quickSort(list, 0, list.size() - 1, null); + } + + /** + * Sorts the specified range of the specified list into ascending order according to the natural ordering of its elements. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in this range must implement the {@link Comparable} interface. + * Furthermore, all elements in this range must be mutually comparable. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the list contains elements that are not mutually comparable. + */ + public static > void sort(List list, int fromIndex, int toIndex) { + rangeCheck(list.size(), fromIndex, toIndex); + quickSort(list, fromIndex, toIndex - 1, null); + } + + /** + * Sorts the specified list according to the order induced by the specified comparator. + * All elements in the list must be mutually comparable using the specified comparator. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param c the comparator to determine the order of the list. A {@code null} value indicates + * that the elements' natural ordering should be used. + * @throws ClassCastException if the list contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(List list, Comparator c) { + quickSort(list, 0, list.size() - 1, c); + } + + /** + * Sorts the specified range of the specified list according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the list. A {@code null} value indicates + * that the elements' natural ordering should be used. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the list contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(List list, int fromIndex, int toIndex, Comparator c) { + rangeCheck(list.size(), fromIndex, toIndex); + quickSort(list, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of objects into ascending order according + * to the {@linkplain Comparable natural ordering} of its elements. + * All elements in the array must implement the {@link Comparable} interface. + * Furthermore, all elements in the array must be mutually comparable. + * + * @param a the array to be sorted. + * @throws ClassCastException if the array contains elements that are not mutually comparable. + */ + public static void sort(Object[] a) { + quickSort(a, 0, a.length - 1, null); + } + + /** + * Sorts the specified range of the specified array of objects into ascending order + * according to the {@linkplain Comparable natural ordering} of its elements. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in this range must implement the {@link Comparable} interface. + * Furthermore, all elements in this range must be mutually comparable. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the array contains elements that are not mutually comparable. + */ + public static void sort(Object[] a, int fromIndex, int toIndex) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, null); + } + + /** + * Sorts the specified array of objects according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param the class of the objects to be sorted. + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. A {@code null} value indicates + * that the elements' {@linkplain Comparable natural ordering} should be used. + * @throws ClassCastException if the array contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(T[] a, Comparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of objects according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param the class of the objects to be sorted. + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. A {@code null} value indicates + * that the elements' {@linkplain Comparable natural ordering} should be used. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the array contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(T[] a, int fromIndex, int toIndex, Comparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of ints according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. + */ + public static void sort(int[] a, IntComparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of ints according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + */ + public static void sort(int[] a, int fromIndex, int toIndex, IntComparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of longs according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. + */ + public static void sort(long[] a, LongComparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of longs according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + */ + public static void sort(long[] a, int fromIndex, int toIndex, LongComparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + // ========== Quick Sort of x[lo..hi] (inclusive) ========== + + private static final int BINARY_INSERT_LIST = 20; + private static final int BINARY_INSERT_ARRAY = 40; + private static final int MOM_START = 400; + private static final int MOM_BASE = 15; + static { + //noinspection ConstantConditions,PointlessBooleanExpression + if (BINARY_INSERT_LIST < 4 || BINARY_INSERT_ARRAY < 4 || MOM_START < 25 || MOM_BASE < 5) + throw new AssertionError("invalid sort constants"); + } + + private static void quickSort(List x, int lo, int hi, Comparator comparator) { + // Quick sort large ranges in a loop to retain stack depth at log(n). + while (hi - lo > BINARY_INSERT_LIST) { + T pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + // Range is large - perform median-of-medians search of good pivot. + pivot = x.get(medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)); + loScan = lo; + hiScan = hi; + } else { + // Range is small - perform median-of-five search of good pivot. + pivot = x.get(medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)); + // Median-of-five rearranges elements around pivot - skip comparisons of 4 outer elements. + loScan = lo + 2; + hiScan = hi - 2; + } + // Excessive checks (loScan <= hiScan) protect from IndexOutOfBoundsException due to unstable ordering. + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x.get(loScan), pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x.get(hiScan), pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + T tmp = x.get(loScan); + x.set(loScan, x.get(hiScan)); + x.set(hiScan, tmp); + loScan++; + hiScan--; + } + // Do recursion into smaller range, then do larger range ourselves. + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + // Protect from degenerate partition when (loScan == lo) due to unstable ordering. + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + // Protect from degenerate partition when (hiScan == hi) due to unstable ordering. + hi = Math.min(hiScan, hi - 1); + } + } + // Binary insertion sort the remaining small range. + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(T[] x, int lo, int hi, Comparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + T pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + T tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(int[] x, int lo, int hi, IntComparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + int pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + int tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(long[] x, int lo, int hi, LongComparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + long pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + long tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + // ========== Binary Insertion Sort of x[lo..hi] (inclusive) ========== + + private static void binaryInsertionSort(List x, int lo, int hi, Comparator comparator) { + for (int i = lo; ++i <= hi;) { + T pivot = x.get(i); + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x.get(mid), comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + for (int k = i; k > left; k--) + x.set(k, x.get(k - 1)); + x.set(left, pivot); + } + } + } + + private static void binaryInsertionSort(T[] x, int lo, int hi, Comparator comparator) { + for (int i = lo; ++i <= hi;) { + T pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + private static void binaryInsertionSort(int[] x, int lo, int hi, IntComparator comparator) { + for (int i = lo; ++i <= hi;) { + int pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + private static void binaryInsertionSort(long[] x, int lo, int hi, LongComparator comparator) { + for (int i = lo; ++i <= hi;) { + long pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + // ========== Median Of Medians ========== + // Finds median of medians using quinary tree and median of five in each node. + // Expected number of used elements is pow(5, 1 + ceil(log(1 + size / MOM_START, MOM_BASE))). + // All used elements are spaced evenly (as much as possible) using "step" step. + + private static int momStep(int lo, int hi) { + int mult = 5; + for (int k = (int)((hi - lo + 1L) / MOM_START); k > 0; k /= MOM_BASE) + mult *= 5; + while (hi - lo < mult - 1 && mult > 5) + mult /= 5; + return (hi - lo) / (mult - 1); + } + + private static int medianOfMedians(Comparator comparator, List x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(Comparator comparator, T[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(IntComparator comparator, int[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(LongComparator comparator, long[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + // ========== Median Of Five ========== + // Finds median of 5 elements using 6 comparisons. See first method for algorithm explanation. + // All methods do reorder their input around median, thus performing partial sorting. + // This side effect is used by quick sort algorithms to skip comparisons of 4 outer elements. + // This side effect is useless for median of medians algorithms, but by using same methods we save on bytecode. + + private static int medianOfFive(Comparator comparator, List x, int ai, int bi, int ci, int di, int ei) { + T a = x.get(ai); + T b = x.get(bi); + T c = x.get(ci); + T d = x.get(di); + T e = x.get(ei); + T t; + // (a, b, c, d, e) - sort (a, b) + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + // (a < b, c, d, e) - sort (d, e) + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + // (a < b, c, d < e) - sort pairs (a < b, d < e) by lowest of (a, d) + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + // (a < b, c, a < d < e) - now [a] < [b, d, e], put it aside + // [a] < [b, d, e] (b, c, d < e) - sort (b, c) + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + // [a] < [c, d, e] (b < c, d < e) - sort pairs (b < c, d < e) by lowest of (b, d) + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + // [a] < [c, d, e] (b < c, b < d < e) - now [b] < [c, d, e], put it aside + // [a, b] < [c, d, e] (c, d < e) - sort (c, d) + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + // [a, b] < [c, d, e] (c < d, c < e) - now [c] < [d, e], rewrite + // [a, b] < [c] < [d, e] - [c] is a median + x.set(ai, a); + x.set(bi, b); + x.set(ci, c); + x.set(di, d); + x.set(ei, e); + return ci; + } + + private static int medianOfFive(Comparator comparator, T[] x, int ai, int bi, int ci, int di, int ei) { + T a = x[ai]; + T b = x[bi]; + T c = x[ci]; + T d = x[di]; + T e = x[ei]; + T t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + private static int medianOfFive(IntComparator comparator, int[] x, int ai, int bi, int ci, int di, int ei) { + int a = x[ai]; + int b = x[bi]; + int c = x[ci]; + int d = x[di]; + int e = x[ei]; + int t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + private static int medianOfFive(LongComparator comparator, long[] x, int ai, int bi, int ci, int di, int ei) { + long a = x[ai]; + long b = x[bi]; + long c = x[ci]; + long d = x[di]; + long e = x[ei]; + long t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + // ========== Utility Code ========== + + /** + * Compares specified objects using either specified comparator or their natural ordering. + */ + @SuppressWarnings("unchecked") + private static int compare(Object o1, Object o2, Comparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (o1 == o2) + return 0; + return c != null ? c.compare(o1, o2) : ((Comparable)o1).compareTo(o2); + } + + private static int compare(int i1, int i2, IntComparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (i1 == i2) + return 0; + return c.compare(i1, i2); + } + + private static int compare(long i1, long i2, LongComparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (i1 == i2) + return 0; + return c.compare(i1, i2); + } + + /** + * Checks that fromIndex and toIndex are in range and throws appropriate exception if they aren't. + */ + private static void rangeCheck(int length, int fromIndex, int toIndex) { + if (fromIndex > toIndex) + throw new IllegalArgumentException("fromIndex " + fromIndex + " > toIndex " + toIndex); + if (fromIndex < 0) + throw new IndexOutOfBoundsException("fromIndex " + fromIndex + " < 0"); + if (toIndex > length) + throw new IndexOutOfBoundsException("toIndex " + toIndex + " > length " + length); + } + + /** + * Private constructor to prevent instantiation. + */ + private QuickSort() {} +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java new file mode 100644 index 0000000000..992b488f7a --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java @@ -0,0 +1,452 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collector; + +/** + * A synchronized thread-safe version of {@link IndexedSet} class. + * It provides following benefits over standard {@link IndexedSet}: + * + *

    + *
  • concurrent asynchronous read access + *
  • synchronized thread-safe write access + *
  • all iterators are concurrent + *
+ * + *

Note that SynchronizedIndexedSet can be wrapped by {@link IndexedMap} + * to create what can be considered a SynchronizedIndexedMap. + */ +public class SynchronizedIndexedSet extends IndexedSet { + private static final long serialVersionUID = 0; + + // ========== static factory methods =========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public static SynchronizedIndexedSet create() { + return new SynchronizedIndexedSet<>(); + } + + /** + * Creates new empty set with default identity indexer. + */ + public static SynchronizedIndexedSet createIdentity() { + return new SynchronizedIndexedSet<>((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Creates new empty set with specified indexer. + */ + public static SynchronizedIndexedSet create(IndexerFunction indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified identity indexer. + */ + public static SynchronizedIndexedSet createIdentity(IndexerFunction.IdentityKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified int indexer. + */ + public static SynchronizedIndexedSet createInt(IndexerFunction.IntKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified long indexer. + */ + public static SynchronizedIndexedSet createLong(IndexerFunction.LongKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.LongKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.LongKey indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction indexer, Collection c) { + return new SynchronizedIndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer, Collection c) { + return new SynchronizedIndexedSet<>(indexer, c); + } + + /** + * Creates a new set with default indexer containing specified elements. + */ + @SafeVarargs + public static SynchronizedIndexedSet of(V... objs) { + return new SynchronizedIndexedSet<>(Arrays.asList(objs)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with default indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + @SuppressWarnings("unchecked") + public static Collector> collector() { + return collector((IndexerFunction)IndexerFunction.DEFAULT); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with default identity indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity() { + return collector((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collector(IndexerFunction indexer) { + return Collector.of(() -> create(indexer), IndexedSet::add, + (left, right) -> { left.addAll(right); return left; }, + Collector.Characteristics.CONCURRENT, Collector.Characteristics.UNORDERED, Collector.Characteristics.IDENTITY_FINISH); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified identity indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity(IndexerFunction.IdentityKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified int indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorInt(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified long indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorLong(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorInt(IndexerFunction.IntKey) collectorInt(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorLong(IndexerFunction.LongKey) collectorLong(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + // ========== Construction and Sizing Operations ========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public SynchronizedIndexedSet() { + super(); + } + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT} and specified initial capacity. + */ + public SynchronizedIndexedSet(int initialCapacity) { + super(initialCapacity); + } + + /** + * Creates new empty set with specified indexer. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer) { + super(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer) { + super(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer, int initialCapacity) { + super(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer, int initialCapacity) { + super(indexer, initialCapacity); + } + + /** + * Creates a new set containing the elements in the specified collection. + * If specified collection is an {@link IndexedSet}, then new indexed set uses same indexer, + * otherwise it uses default indexer {@link IndexerFunction#DEFAULT}. + */ + public SynchronizedIndexedSet(Collection c) { + super(c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer, Collection c) { + super(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer, Collection c) { + super(indexer, c); + } + + /** + * Returns a shallow copy of this set - the values themselves are not cloned. + */ + @Override + public synchronized SynchronizedIndexedSet clone() { + return (SynchronizedIndexedSet)super.clone(); + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + *

+ * Returns this set instance for convenience. + */ + @Override + public synchronized SynchronizedIndexedSet withCapacity(int capacity) { + return (SynchronizedIndexedSet)super.withCapacity(capacity); + } + + /** + * Adds all of the elements in the specified collection into this set. + *

+ * Returns this set instance for convenience. + */ + @Override + public synchronized SynchronizedIndexedSet withElements(Collection c) { + return (SynchronizedIndexedSet)super.withElements(c); + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + */ + @Override + public synchronized void ensureCapacity(int capacity) { + super.ensureCapacity(capacity); + } + + /** + * Trims the capacity of this set instance to be the set's current size. + * An application can use this operation to minimize the storage of this set instance. + */ + @Override + public synchronized void trimToSize() { + super.trimToSize(); + } + + /** + * Removes all elements from this set. + */ + @Override + public synchronized void clear() { + super.clear(); + } + + // ========== Query Operations ========== + + /** + * Returns static structure statistics of this set. + */ + @Override + public synchronized IndexedSetStats getStats() { + // This method is synchronized to provide consistent view of several cross-linked variables. + // It should not pose any contention risk anyway. + return super.getStats(); + } + + // ========== Modification Operations ========== + + /** + * Puts specified element into this set and returns previous element that matches specified one. + */ + @Override + public synchronized V put(V value) { + return super.put(value); + } + + /** + * Puts specified element into this set if it is absent and + * returns current element in the set that matches specified one. + * This is equivalent to + *

+	 *   if (set.containsValue(value)) {
+	 *     return set.getByValue(value);
+	 *   } else {
+	 *     set.put(value);
+	 *     return value;
+	 *   }
+	 * 
+ * except that the action is performed atomically if it is properly synchronized. + *

+ * Note, that unlike {@link ConcurrentMap#putIfAbsent}, + * this method returns specified value (not null) if the value was absent. + */ + @Override + public synchronized V putIfAbsentAndGet(V value) { + return super.putIfAbsentAndGet(value); + } + + /** + * Removes the element from this set which matches specified value if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeValue(V value) { + return super.removeValue(value); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeKey(K key) { + return super.removeKey(key); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeKey(long key) { + return super.removeKey(key); + } + + // ========== Internal Implementation - Helper Instance Methods ========== + + @Override + void checkModification(Object checkCore, long checkModCount) { + // Do nothing - all iterators are concurrent. + } + + @Override + synchronized void removeIterated(Object checkCore, long checkModCount, boolean concurrent, V lastValue, int lastIndex) { + super.removeIterated(checkCore, checkModCount, true, lastValue, lastIndex); + } + + @Override + synchronized void writeCore(ObjectOutputStream out) throws IOException { + // This method is synchronized to provide consistent serialization. + // It should not pose any contention risk anyway. + super.writeCore(out); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java b/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java new file mode 100644 index 0000000000..d293117499 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java @@ -0,0 +1,65 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +/** + * A collection of static utility methods for manipulation of Java long time. + * @see System#currentTimeMillis() + */ +public class TimeUtil { + private TimeUtil() {} // do not create this class + + /** + * Number of milliseconds in a second. + */ + public static final long SECOND = 1000; + + /** + * Number of milliseconds in a minute. + */ + public static final long MINUTE = 60 * SECOND; + + /** + * Number of milliseconds in an hour. + */ + public static final long HOUR = 60 * MINUTE; + + /** + * Number of milliseconds in an day. + */ + public static final long DAY = 24 * HOUR; + + /** + * Returns correct number of seconds with proper handling negative values and overflows. + * Idea is that number of milliseconds shall be within [0..999] interval + * so that the following equation always holds + * {@code getSecondsFromTime(timeMillis) * 1000L + getMillisFromTime(timeMillis) == timeMillis} + * as as long the time in seconds fits into int. + * @see #getMillisFromTime(long) + */ + public static int getSecondsFromTime(long timeMillis) { + return timeMillis >= 0 ? (int)Math.min(timeMillis / SECOND, Integer.MAX_VALUE) : + (int)Math.max((timeMillis + 1) / SECOND - 1, Integer.MIN_VALUE); + } + + /** + * Returns correct number of milliseconds with proper handling negative values. + * Idea is that number of milliseconds shall be within [0..999] interval + * so that the following equation always holds + * {@code getSecondsFromTime(timeMillis) * 1000L + getMillisFromTime(timeMillis) == timeMillis} + * as as long the time in seconds fits into int. + * @see #getSecondsFromTime(long) + */ + public static int getMillisFromTime(long timeMillis) { + return (int)Math.floorMod(timeMillis, SECOND); + } +} diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 25ed10ff86..5296ac51f7 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -274,6 +274,7 @@ public class Fields { public static final int cutSparkOnHardLimit_offset = 1464; public static final int cylinderBore_offset = 408; public static final int cylindersCount_offset = 400; + public static final int dcMotorIdleValve_offset = 976; public static final int debugMapAveraging_offset = 807; public static final int debugMode_offset = 2092; public static final int debugTriggerSync_offset = 676; @@ -1056,7 +1057,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 692540479; + public static final int SIGNATURE_HASH = 1542883429; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1303,7 +1304,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.22.all.692540479"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.28.all.1542883429"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -1338,7 +1339,6 @@ public class Fields { public static final int unusedAuxVoltage1_TODO_332_offset = 2713; public static final int unusedAuxVoltage2_TODO_332_offset = 2714; public static final int unusedBit4_1476_offset = 1476; - public static final int unusedBit_251_11_offset = 976; public static final int unusedBit_251_12_offset = 976; public static final int unusedBit_251_13_offset = 976; public static final int unusedBit_251_14_offset = 976; @@ -1506,7 +1506,7 @@ public class Fields { public static final Field CYLINDERBORE = Field.create("CYLINDERBORE", 408, FieldType.FLOAT); public static final Field SENSORSNIFFERRPMTHRESHOLD = Field.create("SENSORSNIFFERRPMTHRESHOLD", 412, FieldType.INT); public static final Field RPMHARDLIMIT = Field.create("RPMHARDLIMIT", 416, FieldType.INT); - public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID"}; + public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID"}; public static final Field FUELALGORITHM = Field.create("FUELALGORITHM", 420, FieldType.INT, engine_load_mode_e); public static final Field CRANKINGINJECTIONMODE = Field.create("CRANKINGINJECTIONMODE", 424, FieldType.INT); public static final Field INJECTIONMODE = Field.create("INJECTIONMODE", 428, FieldType.INT); @@ -1888,7 +1888,7 @@ public class Fields { public static final Field ENABLEINNOVATELC2 = Field.create("ENABLEINNOVATELC2", 976, FieldType.BIT, 8); public static final Field SHOWHUMANREADABLEWARNING = Field.create("SHOWHUMANREADABLEWARNING", 976, FieldType.BIT, 9); public static final Field STFTIGNOREERRORMAGNITUDE = Field.create("STFTIGNOREERRORMAGNITUDE", 976, FieldType.BIT, 10); - public static final Field UNUSEDBIT_251_11 = Field.create("UNUSEDBIT_251_11", 976, FieldType.BIT, 11); + public static final Field DCMOTORIDLEVALVE = Field.create("DCMOTORIDLEVALVE", 976, FieldType.BIT, 11); public static final Field UNUSEDBIT_251_12 = Field.create("UNUSEDBIT_251_12", 976, FieldType.BIT, 12); public static final Field UNUSEDBIT_251_13 = Field.create("UNUSEDBIT_251_13", 976, FieldType.BIT, 13); public static final Field UNUSEDBIT_251_14 = Field.create("UNUSEDBIT_251_14", 976, FieldType.BIT, 14); @@ -2357,7 +2357,7 @@ public class Fields { public static final Field GPPWM1_PWMFREQUENCY = Field.create("GPPWM1_PWMFREQUENCY", 4146, FieldType.INT16); public static final Field GPPWM1_ONABOVEDUTY = Field.create("GPPWM1_ONABOVEDUTY", 4148, FieldType.INT8); public static final Field GPPWM1_OFFBELOWDUTY = Field.create("GPPWM1_OFFBELOWDUTY", 4149, FieldType.INT8); - public static final String[] gppwm_channel_e = {"TPS", "MAP", "CLT", "IAT"}; + public static final String[] gppwm_channel_e = {"TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID"}; public static final Field GPPWM1_LOADAXIS = Field.create("GPPWM1_LOADAXIS", 4150, FieldType.INT8, gppwm_channel_e); public static final Field GPPWM1_ALIGNMENTFILL_MAP = Field.create("GPPWM1_ALIGNMENTFILL_MAP", 4151, FieldType.INT8); public static final Field GPPWM1_TABLE = Field.create("GPPWM1_TABLE", 4168, FieldType.INT); @@ -2874,7 +2874,7 @@ public class Fields { ENABLEINNOVATELC2, SHOWHUMANREADABLEWARNING, STFTIGNOREERRORMAGNITUDE, - UNUSEDBIT_251_11, + DCMOTORIDLEVALVE, UNUSEDBIT_251_12, UNUSEDBIT_251_13, UNUSEDBIT_251_14, diff --git a/java_console/models/src/main/java/com/rusefi/core/EngineState.java b/java_console/models/src/main/java/com/rusefi/core/EngineState.java index 29e8e992a4..ca5d6340b9 100644 --- a/java_console/models/src/main/java/com/rusefi/core/EngineState.java +++ b/java_console/models/src/main/java/com/rusefi/core/EngineState.java @@ -1,5 +1,6 @@ package com.rusefi.core; +import com.devexperts.logging.Logging; import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.LinkDecoder; @@ -8,6 +9,8 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.*; +import static com.devexperts.logging.Logging.getLogging; + /** * Date: 12/25/12 * Andrey Belomutskiy, (c) 2013-2020 @@ -15,6 +18,8 @@ import java.util.*; * @see #registerStringValueAction */ public class EngineState { + private static final Logging log = getLogging(EngineState.class); + public static final String SEPARATOR = ","; public static final String PACKING_DELIMITER = ":"; public static final Class ENGINE_STATE_CLASS = EngineState.class; @@ -43,11 +48,10 @@ public class EngineState { } private final ResponseBuffer buffer; - private final Logger logger; private final List actions = new ArrayList<>(); private final Set keys = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); - public EngineState(@NotNull final EngineStateListener listener, Logger logger) { + public EngineState(@NotNull final EngineStateListener listener) { buffer = new ResponseBuffer(new ResponseBuffer.ResponseListener() { public void onResponse(String response) { if (response != null) { @@ -64,9 +68,8 @@ public class EngineState { } } ); - this.logger = logger; - registerStringValueAction(Fields.PROTOCOL_MSG, value -> MessagesCentral.getInstance().postMessage(logger, ENGINE_STATE_CLASS, value)); + registerStringValueAction(Fields.PROTOCOL_MSG, value -> MessagesCentral.getInstance().postMessage(ENGINE_STATE_CLASS, value)); } /** @@ -133,7 +136,7 @@ public class EngineState { response = handleStringActionPair(response, pair, listener); } if (originalResponse.length() == response.length()) { - logger.info("EngineState.unknown: " + response); + log.info("EngineState.unknown: " + response); int keyEnd = response.indexOf(SEPARATOR); if (keyEnd == -1) { // discarding invalid line @@ -146,7 +149,7 @@ public class EngineState { return ""; } String value = response.substring(keyEnd, valueEnd); - logger.info("Invalid key [" + unknownKey + "] value [" + value + "]"); + log.info("Invalid key [" + unknownKey + "] value [" + value + "]"); // trying to process the rest of the line response = response.substring(valueEnd + SEPARATOR.length()); } diff --git a/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java b/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java index ddd8a24ce3..1f57c8d876 100644 --- a/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java +++ b/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java @@ -1,11 +1,13 @@ package com.rusefi.core; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import javax.swing.*; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import static com.devexperts.logging.Logging.getLogging; + /** * Messages from the firmware and UI panels which want to display them * @@ -13,6 +15,8 @@ import java.util.concurrent.CopyOnWriteArrayList; * Andrey Belomutskiy, (c) 2013-2020 */ public class MessagesCentral { + private static final Logging log = getLogging(MessagesCentral.class); + private static final MessagesCentral INSTANCE = new MessagesCentral(); private final List listeners = new CopyOnWriteArrayList<>(); @@ -27,8 +31,8 @@ public class MessagesCentral { listeners.add(listener); } - public void postMessage(Logger logger, final Class clazz, final String message) { - logger.info("postMessage " + clazz.getSimpleName() + ": " + message); + public void postMessage(final Class clazz, final String message) { + log.info("postMessage " + clazz.getSimpleName() + ": " + message); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { diff --git a/java_console/models/src/main/java/com/rusefi/core/Sensor.java b/java_console/models/src/main/java/com/rusefi/core/Sensor.java index 4e48e84366..f0e21d5e76 100644 --- a/java_console/models/src/main/java/com/rusefi/core/Sensor.java +++ b/java_console/models/src/main/java/com/rusefi/core/Sensor.java @@ -32,6 +32,8 @@ public enum Sensor { INT_TEMP(GAUGE_NAME_CPU_TEMP, SensorCategory.OPERATIONS, FieldType.INT8, 10, 1, 0, 5, "C"), CLT(GAUGE_NAME_CLT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 12, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), IAT(GAUGE_NAME_IAT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 14, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), + AuxT1("AuxT1", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 16, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), + AuxT2("AuxT2", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 18, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), // throttle, pedal TPS(GAUGE_NAME_TPS, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 20, 1.0 / PACK_MULT_PERCENT, 0, 100, "%"), // throttle position sensor diff --git a/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java b/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java index 32f15d4af9..c377e42cd2 100644 --- a/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java +++ b/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java @@ -11,9 +11,9 @@ import java.util.concurrent.CopyOnWriteArrayList; *

* Date: 1/6/13 * Andrey Belomutskiy, (c) 2013-2020 + * @see SensorLog */ public class SensorCentral implements ISensorCentral { - public static final String RPM_KEY = "rpm"; private static final SensorCentral INSTANCE = new SensorCentral(); private final SensorsHolder sensorsHolder = new SensorsHolder(); diff --git a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java index 0c7ac50f68..a103786bde 100644 --- a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java @@ -1,8 +1,35 @@ package com.rusefi; +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { - public static final int CONSOLE_VERSION = 20200717; + public static final int CONSOLE_VERSION = 20200724; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); + + public static long classBuildTimeMillis() { + Class clazz = rusEFIVersion.class; + URL resource = clazz.getResource(clazz.getSimpleName() + ".class"); + if (resource == null) { + throw new IllegalStateException("Failed to find class file for class: " + + clazz.getName()); + } + + if (resource.getProtocol().equals("file")) { + try { + return new File(resource.toURI()).lastModified(); + } catch (URISyntaxException e) { + return 0; + } + } else if (resource.getProtocol().equals("jar")) { + String path = resource.getPath(); + return new File(path.substring(5, path.indexOf("!"))).lastModified(); + } else { + throw new IllegalArgumentException("Unhandled url protocol: " + + resource.getProtocol() + " for class: " + + clazz.getName() + " resource: " + resource.toString()); + } + } } diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 5448a59080..791997042b 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + diff --git a/java_console/shared_ui/src/com/rusefi/tools/online/Online.java b/java_console/shared_ui/src/com/rusefi/tools/online/Online.java index 8c4bdd48ed..496227ed64 100644 --- a/java_console/shared_ui/src/com/rusefi/tools/online/Online.java +++ b/java_console/shared_ui/src/com/rusefi/tools/online/Online.java @@ -44,7 +44,7 @@ public class Online { System.out.println("response=" + response); System.out.println("code " + response.getStatusLine().getStatusCode()); - JSONObject object = HttpUtil.getJsonResponse(response); + JSONObject object = HttpUtil.getJsonResponse(HttpUtil.getResponse(response)); System.out.println("object=" + object); JSONArray info = (JSONArray) object.get("info"); diff --git a/java_console/tools/src/com/irnems/AdcFilter.java b/java_console/tools/src/com/irnems/AdcFilter.java index f5e98549bd..3adc41351a 100644 --- a/java_console/tools/src/com/irnems/AdcFilter.java +++ b/java_console/tools/src/com/irnems/AdcFilter.java @@ -1,6 +1,5 @@ package com.irnems; -import com.rusefi.FileLog; import com.rusefi.core.EngineState; import com.rusefi.file.FileUtils; @@ -41,7 +40,7 @@ public class AdcFilter { } }; - EngineState engineState = new EngineState(listener, FileLog.LOGGER); + EngineState engineState = new EngineState(listener); FileUtils.readFile2(filename, engineState); diff --git a/java_console/tools/src/com/irnems/file/FrequencyDivider.java b/java_console/tools/src/com/irnems/file/FrequencyDivider.java index 67a47a89f9..77a53dc256 100644 --- a/java_console/tools/src/com/irnems/file/FrequencyDivider.java +++ b/java_console/tools/src/com/irnems/file/FrequencyDivider.java @@ -1,6 +1,5 @@ package com.irnems.file; -import com.rusefi.FileLog; import com.rusefi.core.EngineState; import com.rusefi.file.FileUtils; @@ -42,7 +41,7 @@ public class FrequencyDivider { lineCounter++; } }; - FileUtils.readFile(filename, listener, FileLog.LOGGER); + FileUtils.readFile(filename, listener); fos.close(); } } diff --git a/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java b/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java index 59821a9c2f..e2892ab0dd 100644 --- a/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java +++ b/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java @@ -143,7 +143,7 @@ public class ConsoleUI { tabbedPane.addTab("Trigger Shape", new AverageAnglePanel(uiContext).getPanel()); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocol.COMPOSITE_OFF_RPM); + MessagesCentral.getInstance().postMessage(ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocol.COMPOSITE_OFF_RPM); tabbedPane.addTab("rusEFI Online", new OnlineTab(uiContext).getContent()); @@ -235,7 +235,7 @@ public class ConsoleUI { new ConsoleUI(port); } else { for (String p : LinkManager.getCommPorts()) - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, Launcher.class, "Available port: " + p); + MessagesCentral.getInstance().postMessage(Launcher.class, "Available port: " + p); new StartupFrame().chooseSerialPort(); } diff --git a/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java b/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java index c17cfd82f1..9c266130d6 100644 --- a/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java +++ b/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java @@ -100,7 +100,7 @@ public class EcuStimulator { putValue("engine_load", engineLoad) + putValue("advance", advance) + putValue("dwell", dwell); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EcuStimulator.class, msg); + MessagesCentral.getInstance().postMessage(EcuStimulator.class, msg); try { csv.write(msg + "\r\n"); @@ -232,7 +232,7 @@ public class EcuStimulator { } private static void log(String message) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EcuStimulator.class, message); + MessagesCentral.getInstance().postMessage(EcuStimulator.class, message); FileLog.MAIN.logLine(message); } diff --git a/java_console/ui/src/main/java/com/rusefi/Launcher.java b/java_console/ui/src/main/java/com/rusefi/Launcher.java index 37b7dcd581..9d3c298577 100644 --- a/java_console/ui/src/main/java/com/rusefi/Launcher.java +++ b/java_console/ui/src/main/java/com/rusefi/Launcher.java @@ -1,11 +1,14 @@ package com.rusefi; +import com.devexperts.logging.Logging; import com.rusefi.tools.ConsoleTools; import com.rusefi.ui.engine.EngineSnifferPanel; import com.rusefi.ui.storage.PersistentConfiguration; import java.util.Date; +import static com.devexperts.logging.Logging.getLogging; + /** * this is the main entry point of rusEfi ECU console *

@@ -17,6 +20,7 @@ import java.util.Date; * @see EngineSnifferPanel */ public class Launcher extends rusEFIVersion { + private static final Logging log = getLogging(Launcher.class); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); @@ -26,9 +30,9 @@ public class Launcher extends rusEFIVersion { * @see StartupFrame if no parameters specified */ public static void main(final String[] args) throws Exception { - System.out.println("rusEFI UI console " + CONSOLE_VERSION); - System.out.println("Compiled " + new Date(ConsoleTools.classBuildTimeMillis())); - System.out.println("\n\n"); + log.info("rusEFI UI console " + CONSOLE_VERSION); + log.info("Compiled " + new Date(rusEFIVersion.classBuildTimeMillis())); + log.info("\n\n"); PersistentConfiguration.registerShutdownHook(); if (ConsoleTools.runTool(args)) { diff --git a/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java b/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java index 4b143886ae..277ab21d77 100644 --- a/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java +++ b/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java @@ -8,10 +8,12 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; +import java.util.concurrent.ThreadFactory; import static com.rusefi.ui.util.UiUtils.setToolTip; public class SimulatorHelper { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("SimulatorHelper"); public static final String BINARY = "rusefi_simulator.exe"; private static Process process; @@ -27,7 +29,7 @@ public class SimulatorHelper { LinkManager.isSimulationMode = true; FileLog.MAIN.logLine("Executing " + BINARY); - new Thread(new Runnable() { + THREAD_FACTORY.newThread(new Runnable() { @Override public void run() { try { diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java b/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java index 53508664d8..0728090650 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java +++ b/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java @@ -1,6 +1,5 @@ package com.rusefi.autodetect; -import com.rusefi.FileLog; import com.rusefi.IoUtil; import com.rusefi.io.ConnectionStatusLogic; import com.rusefi.io.LinkManager; @@ -11,7 +10,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class ReconnectSandbox { public static void main(String[] args) { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); LightweightGUI.waitForDeviceAndStart(linkManager); diff --git a/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java b/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java index 09ee5d3d84..398a7c9365 100644 --- a/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java +++ b/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java @@ -40,7 +40,7 @@ public abstract class TestSequenceStep { next.execute(executor); } } else { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, TestSequenceStep.class, "ETB test sequence done!"); + MessagesCentral.getInstance().postMessage(TestSequenceStep.class, "ETB test sequence done!"); } } diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java index 03ab5a0c3a..59b1d52e59 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java @@ -2,7 +2,6 @@ package com.rusefi.maintenance; import com.opensr5.ini.IniFileModel; import com.rusefi.ConsoleUI; -import com.rusefi.FileLog; import com.rusefi.Launcher; import com.rusefi.Timeouts; import com.rusefi.autodetect.PortDetector; @@ -45,14 +44,14 @@ public class DfuFlasher { if (!PortDetector.isAutoPort(port)) { messages.append("Using selected " + port + "\n"); - IoStream stream = SerialIoStreamJSerialComm.openPort(port, FileLog.LOGGER); - DfuHelper.sendDfuRebootCommand(stream, messages, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(port); + DfuHelper.sendDfuRebootCommand(stream, messages); } else { messages.append("Auto-detecting port...\n"); // instead of opening the just-detected port we execute the command using the same stream we used to discover port // it's more reliable this way port = PortDetector.autoDetectSerial(stream -> { - DfuHelper.sendDfuRebootCommand(stream, messages, FileLog.LOGGER); + DfuHelper.sendDfuRebootCommand(stream, messages); return null; }); if (port == null) { diff --git a/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java b/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java index b61c661085..443acf4dd6 100644 --- a/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java +++ b/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java @@ -1,6 +1,7 @@ package com.rusefi.sensor_logs; import com.rusefi.FileLog; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; @@ -13,7 +14,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; public class BinarySensorLogRestarter implements SensorLog { - private final static Executor UPLOAD_EXECUTOR = Executors.newSingleThreadExecutor(); + private final static Executor UPLOAD_EXECUTOR = Executors.newSingleThreadExecutor(new NamedThreadFactory("BinarySensorLogRestarter")); private BinarySensorLog logger; diff --git a/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java b/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java index b213a155fc..e5a4d5d6b1 100644 --- a/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java +++ b/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java @@ -82,14 +82,12 @@ public class SensorLogger { Sensor.engineMakeCodeNameCrc16, Sensor.tuneCrc16, }; - private final UIContext uiContext; - private List sensorLogs; + private final List sensorLogs; private boolean isInitialized; public SensorLogger(UIContext uiContext) { - this.uiContext = uiContext; sensorLogs = Arrays.asList(new PlainTextSensorLog(uiContext), new BinarySensorLogRestarter()); } diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 3ad6109eae..742058828a 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -21,7 +21,7 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.serial.SerialIoStreamJSerialComm; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.maintenance.ExecHelper; -import com.rusefi.server.BackendLauncher; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.tools.online.Online; import com.rusefi.tune.xml.Msq; import com.rusefi.ui.AuthTokenPanel; @@ -31,8 +31,6 @@ import org.jetbrains.annotations.Nullable; import javax.xml.bind.JAXBException; import java.io.File; import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; import java.util.Arrays; import java.util.Map; import java.util.TreeMap; @@ -62,9 +60,8 @@ public class ConsoleTools { registerTool("compile_fsio_line", ConsoleTools::invokeCompileExpressionTool, "Convert a line to RPN form."); registerTool("compile_fsio_file", ConsoleTools::runCompileTool, "Convert all lines from a file to RPN form."); - registerTool("proxy_server", BackendLauncher::start, "NOT A USER TOOL"); - registerTool("network_connector", NetworkConnectorStartup::start, "Connect your rusEFI ECU to rusEFI Online"); - registerTool("network_authenticator", LocalApplicationProxy::start, "rusEFI Online Authenticator"); + registerTool("network_connector", strings -> NetworkConnectorStartup.start(), "Connect your rusEFI ECU to rusEFI Online"); + registerTool("network_authenticator", strings -> LocalApplicationProxy.start(), "rusEFI Online Authenticator"); registerTool("print_auth_token", args -> printAuthToken(), "Print current rusEFI Online authentication token."); registerTool(SET_AUTH_TOKEN, ConsoleTools::setAuthToken, "Set rusEFI authentication token."); @@ -72,7 +69,8 @@ public class ConsoleTools { registerTool("version", ConsoleTools::version, "Only print version"); - registerTool("lightui", ConsoleTools::lightUI, "Start lightweight GUI for tiny screens"); + registerTool("lightui", strings -> lightUI(), "Start lightweight GUI for tiny screens"); + registerTool("dfu", DfuTool::run, "Program specified file into ECU via DFU"); registerTool("detect", ConsoleTools::detect, "Find attached rusEFI"); @@ -115,7 +113,7 @@ public class ConsoleTools { System.out.println("tune_CRC16=" + crc16); } - private static void lightUI(String[] strings) { + private static void lightUI() { LightweightGUI.start(); } @@ -146,9 +144,9 @@ public class ConsoleTools { String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) return; - IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort); byte[] commandBytes = BinaryProtocol.getTextCommandBytes(command); - stream.sendPacket(commandBytes, FileLog.LOGGER); + stream.sendPacket(commandBytes); } @@ -207,11 +205,11 @@ public class ConsoleTools { System.err.println(RUS_EFI_NOT_DETECTED); return; } - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); linkManager.startAndConnect(autoDetectedPort, new ConnectionStateListener() { @Override public void onConnectionEstablished() { - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } @Override @@ -291,45 +289,25 @@ public class ConsoleTools { Online.upload(new File(Online.outputXmlFileName), authToken); } - public static long classBuildTimeMillis() throws URISyntaxException, IllegalStateException, IllegalArgumentException { - Class clazz = ConsoleTools.class; - URL resource = clazz.getResource(clazz.getSimpleName() + ".class"); - if (resource == null) { - throw new IllegalStateException("Failed to find class file for class: " + - clazz.getName()); - } - - if (resource.getProtocol().equals("file")) { - return new File(resource.toURI()).lastModified(); - } else if (resource.getProtocol().equals("jar")) { - String path = resource.getPath(); - return new File(path.substring(5, path.indexOf("!"))).lastModified(); - } else { - throw new IllegalArgumentException("Unhandled url protocol: " + - resource.getProtocol() + " for class: " + - clazz.getName() + " resource: " + resource.toString()); - } - } - static void detect(String[] strings) throws IOException, InterruptedException { String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) { System.out.println(RUS_EFI_NOT_DETECTED); return; } - IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort); Logger logger = FileLog.LOGGER; IncomingDataBuffer incomingData = stream.getDataBuffer(); byte[] commandBytes = BinaryProtocol.getTextCommandBytes("hello"); - stream.sendPacket(commandBytes, logger); + stream.sendPacket(commandBytes); // skipping response - incomingData.getPacket(logger, "", true); + incomingData.getPacket("", true); sleep(300); - stream.sendPacket(new byte[]{Fields.TS_GET_TEXT}, logger); + stream.sendPacket(new byte[]{Fields.TS_GET_TEXT}); sleep(300); - byte[] response = incomingData.getPacket(logger, "", true); + byte[] response = incomingData.getPacket("", true); if (response == null) { System.out.println("No response"); return; diff --git a/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java new file mode 100644 index 0000000000..53af297d59 --- /dev/null +++ b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java @@ -0,0 +1,34 @@ +package com.rusefi.tools; + +import com.rusefi.dfu.BinaryImage; +import com.rusefi.dfu.DfuImage; +import com.rusefi.dfu.DfuLogic; +import com.rusefi.dfu.HexImage; +import com.rusefi.dfu.usb4java.DfuDeviceLocator; +import com.rusefi.dfu.usb4java.USBDfuConnection; +import cz.jaybee.intelhex.IntelHexException; + +import java.io.IOException; + +public class DfuTool { + public static void run(String[] args) throws IOException, IntelHexException { + if (args.length < 2) { + System.err.println(".dfu or .hex filename parameter expected"); + return; + } + String fileName = args[1]; + + DfuLogic.Logger logger = DfuLogic.Logger.CONSOLE; + USBDfuConnection device = DfuDeviceLocator.findDevice(logger); + if (device == null) { + System.err.println("No DFU devices found"); + return; + } + + BinaryImage image = fileName.toLowerCase().trim().endsWith(".dfu") ? new DfuImage().read(fileName) : HexImage.loadHexToBuffer(fileName, device.getFlashRange()); + + DfuLogic.uploadImage(logger, device, image, device.getFlashRange()); + + logger.info("DfuSe DFU " + device); + } +} diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index d51559bb9e..c98b29f468 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -1,16 +1,15 @@ package com.rusefi.tools; +import com.devexperts.logging.Logging; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; import com.rusefi.proxy.NetworkConnector; -import com.rusefi.server.Backend; -import com.rusefi.server.SessionDetails; +import com.rusefi.proxy.NetworkConnectorContext; import com.rusefi.ui.AuthTokenPanel; -import java.io.IOException; - public class NetworkConnectorStartup { - public static void start(String[] strings) throws IOException, InterruptedException { + private final static Logging log = Logging.getLogging(NetworkConnectorStartup.class); + public static void start() { String authToken = AuthTokenPanel.getAuthToken(); if (!AutoTokenUtil.isToken(authToken)) { System.err.println("Please configure authentication token using 'set_auth_token' command"); @@ -23,7 +22,9 @@ public class NetworkConnectorStartup { return; } - SessionDetails sessionDetails = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, Backend.SERVER_PORT_FOR_CONTROLLERS); - System.out.println("Running with " + sessionDetails.getOneTimeToken()); + NetworkConnectorContext connectorContext = new NetworkConnectorContext(); + + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(authToken, autoDetectedPort, connectorContext); + log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java b/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java index f813529de7..a697a97d03 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java @@ -6,7 +6,6 @@ import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.config.generated.Fields; import com.rusefi.core.MessagesCentral; import com.rusefi.io.CommandQueue; -import com.rusefi.io.LinkManager; import com.rusefi.ui.util.UiUtils; import javax.swing.*; @@ -293,7 +292,7 @@ public class RecentCommands { } catch (IOException e) { throw new IllegalStateException(e); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AverageAnglesUtil.class, report); + MessagesCentral.getInstance().postMessage(AverageAnglesUtil.class, report); } } }); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java b/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java index 582f6e05c9..0aa99ceae2 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java @@ -1,5 +1,6 @@ package com.rusefi.ui; +import com.rusefi.NamedThreadFactory; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCategory; import com.rusefi.core.SensorCentral; @@ -11,6 +12,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.LinkedList; +import java.util.concurrent.ThreadFactory; /** * Andrey Belomutskiy, (c) 2013-2020 @@ -18,6 +20,7 @@ import java.util.LinkedList; */ @SuppressWarnings("InfiniteLoopStatement") public class SensorLiveGraph extends JPanel { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("SensorLiveGraph", true); private static final int COUNT = 30; private static final String SENSOR_TYPE = "sensor"; private static final String PERIOD = "period"; @@ -41,8 +44,7 @@ public class SensorLiveGraph extends JPanel { String gaugeName = config.getProperty(SENSOR_TYPE, defaultSensor.name()); this.sensor = Sensor.lookup(gaugeName, defaultSensor); - Thread thread = new Thread(createRunnable()); - thread.setDaemon(true); + Thread thread = THREAD_FACTORY.newThread(createRunnable()); thread.start(); period = ChangePeriod.lookup(config.getProperty(PERIOD)); autoScale = config.getBoolProperty(USE_AUTO_SCALE); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java b/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java index 07226b801a..fd0ea6aca2 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java @@ -1,13 +1,12 @@ package com.rusefi.ui; -import com.rusefi.FileLog; import com.rusefi.SensorSnifferCentral; import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; import com.rusefi.sensor_logs.SensorLogger; public class UIContext { - private final LinkManager linkManager = new LinkManager(FileLog.LOGGER); + private final LinkManager linkManager = new LinkManager(); public SensorLogger sensorLogger = new SensorLogger(this); public GaugesPanel.DetachedRepository DetachedRepositoryINSTANCE = new GaugesPanel.DetachedRepository(this); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java index 7c42ecc378..519fe9476f 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java @@ -13,6 +13,7 @@ import com.rusefi.ui.util.UiUtils; import java.util.TimeZone; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; public class MainFrame { @@ -21,7 +22,7 @@ public class MainFrame { /** * @see StartupFrame */ - private FrameHelper frame = new FrameHelper() { + private final FrameHelper frame = new FrameHelper() { @Override protected void onWindowOpened() { FileLog.MAIN.logLine("onWindowOpened"); @@ -42,26 +43,13 @@ public class MainFrame { } }; - public ConnectionStateListener listener; + public ConnectionFailedListener listener; public MainFrame(ConsoleUI consoleUI, TabbedPanel tabbedPane) { this.consoleUI = consoleUI; this.tabbedPane = tabbedPane; - listener = new ConnectionStateListener() { - @Override - public void onConnectionFailed() { - } - - @Override - public void onConnectionEstablished() { - FileLog.MAIN.logLine("onConnectionEstablished"); - // tabbedPane.romEditorPane.showContent(); - tabbedPane.settingsTab.showContent(); - tabbedPane.logsManager.showContent(); - tabbedPane.fuelTunePane.showContent(); - new BinaryProtocolServer(FileLog.LOGGER).start(consoleUI.uiContext.getLinkManager()); - } + listener = () -> { }; } @@ -91,12 +79,10 @@ public class MainFrame { @Override public void onConnectionEstablished() { - FileLog.MAIN.logLine("onConnectionEstablished"); -// tabbedPane.romEditorPane.showContent(); tabbedPane.settingsTab.showContent(); tabbedPane.logsManager.showContent(); tabbedPane.fuelTunePane.showContent(); - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } }); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java index 5eb9f16e0c..41f3ee3516 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java @@ -1,6 +1,5 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; @@ -62,14 +61,14 @@ public class EtbMonteCarloSequence { ":pFactor:" + pFactor + ":iFactor:" + iFactor + ":dFactor:" + dFactor; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, stats); + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, stats); uiContext.getCommandQueue().write("etbreset"); uiContext.getCommandQueue().write("set etb_o " + offset); uiContext.getCommandQueue().write("set etb_p " + pFactor); uiContext.getCommandQueue().write("set etb_i " + iFactor); uiContext.getCommandQueue().write("set etb_d " + dFactor); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + " running " + stats); TestSequenceStep firstStep = new EtbTarget(uiContext, 10 * SECOND, DEFAULT_POSITION, null, TestSequenceStep.Condition.YES); @@ -79,7 +78,7 @@ public class EtbMonteCarloSequence { double currentValue = StandardTestSequence.metric.getStandardDeviation(); boolean shouldRun = currentValue < bestResultSoFar; if (!shouldRun) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, "Two much error accumulated, aborting! " + currentValue + " > " + bestResultSoFar); } @@ -93,7 +92,7 @@ public class EtbMonteCarloSequence { Runnable onEachStep = () -> SwingUtilities.invokeLater(() -> { String state = stepCounter.incrementAndGet() + "/" + totalSteps.get(); double value = StandardTestSequence.metric.getStandardDeviation(); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class,"Running " + state + ", current=" + value); + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class,"Running " + state + ", current=" + value); }); TestSequenceStep last = StandardTestSequence.addSequence(uiContext, firstStep, onEachStep, condition); @@ -109,18 +108,18 @@ public class EtbMonteCarloSequence { double cycleResult = SensorCentral.getInstance().getValue(Sensor.ETB_CONTROL_QUALITY); if (cycleResult < bestResultSoFar) { bestResultSoFar = cycleResult; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + ":" + stats + ":new_record:" + bestResultSoFar); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + ":" + stats + ":result:" + cycleResult); if (counter == TOTAL_CYCLES_COUNT) { stopETB(); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbTestSequence.class, "ETB MC sequence done!"); + MessagesCentral.getInstance().postMessage(EtbTestSequence.class, "ETB MC sequence done!"); return; } counter++; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbTestSequence.class, "Starting " + counter + " of " + TOTAL_CYCLES_COUNT); + MessagesCentral.getInstance().postMessage(EtbTestSequence.class, "Starting " + counter + " of " + TOTAL_CYCLES_COUNT); runRandomCycle(); } diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java index 2b80fb57d1..54c74c400d 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java @@ -1,10 +1,8 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; -import com.rusefi.io.CommandQueue; import com.rusefi.ui.UIContext; import javax.swing.*; @@ -82,7 +80,7 @@ public class EtbReturnToNeutral { uiContext.getCommandQueue().write(ZERO_DUTY_CYCLE_COMMAND); // CommandQueue.getInstance().write(DirectDrivePanel.CANCEL_DIRECT_DRIVE_COMMAND); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Cycles = " + CYCLES_COUNT + ", errors = " + errorCount); + MessagesCentral.getInstance().postMessage(getClass(), "Cycles = " + CYCLES_COUNT + ", errors = " + errorCount); } /** @@ -90,10 +88,10 @@ public class EtbReturnToNeutral { */ private boolean assertPosition(String msg, float expectedPosition) { double tps = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), msg + " TPS=" + tps); + MessagesCentral.getInstance().postMessage(getClass(), msg + " TPS=" + tps); boolean isError = Math.abs(tps - expectedPosition) > ACCEPTABLE_ERROR; if (isError) - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), msg + " NOT GREAT " + tps + " while expected " + expectedPosition); + MessagesCentral.getInstance().postMessage(getClass(), msg + " NOT GREAT " + tps + " while expected " + expectedPosition); return isError; } diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java index 8f553cc378..ab4a3db063 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java @@ -1,10 +1,8 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; -import com.rusefi.io.CommandQueue; import com.rusefi.io.InvocationConfirmationListener; import com.rusefi.ui.UIContext; import org.putgemin.VerticalFlowLayout; @@ -66,7 +64,7 @@ public class MagicSpotsFinder { sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); + MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); if (tpsPosition >= 100 - MEASURMENT_PRECISION) { currentDutyCycle -= DUTY_CYCLE_STEP; @@ -77,7 +75,7 @@ public class MagicSpotsFinder { // if that's the first we've moved let's remember duty cycle value startedToCloseValue = currentDutyCycle; startedToCloseValueLabel.setText(String.format("Started Close %.1f", startedToCloseValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Started to close at " + startedToCloseValue); + MessagesCentral.getInstance().postMessage(getClass(), "Started to close at " + startedToCloseValue); } currentDutyCycle -= DUTY_CYCLE_STEP; @@ -85,10 +83,10 @@ public class MagicSpotsFinder { } else { backToZeroValue = currentDutyCycle; backToZeroValueLabel.setText(String.format("Back Zero %.1f", backToZeroValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Back closed to close at " + backToZeroValue); + MessagesCentral.getInstance().postMessage(getClass(), "Back closed to close at " + backToZeroValue); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToCloseValue = " + startedToCloseValue + ", backToZeroValue = " + backToZeroValue); + MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); + MessagesCentral.getInstance().postMessage(getClass(), "startedToCloseValue = " + startedToCloseValue + ", backToZeroValue = " + backToZeroValue); button.setEnabled(true); button.setText(MAGIC_SPOTS_FINDER); } @@ -108,7 +106,7 @@ public class MagicSpotsFinder { sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); + MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); if (tpsPosition < defaultTpsPosition + MEASURMENT_PRECISION) { // ETB has not moved yet, keep going up @@ -120,7 +118,7 @@ public class MagicSpotsFinder { // if that's the first we've moved let's remember duty cycle value startedToOpenValue = currentDutyCycle; startedToOpenValueLabel.setText(String.format("Start to open: %.1f", startedToOpenValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Started to open at " + startedToOpenValue); + MessagesCentral.getInstance().postMessage(getClass(), "Started to open at " + startedToOpenValue); } @@ -132,7 +130,7 @@ public class MagicSpotsFinder { // looks like we have reached 100%, cool! reached100Value = currentDutyCycle; reached100ValueLabel.setText(String.format("Reached 100: %.1f", reached100Value)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); + MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); currentDutyCycle -= DUTY_CYCLE_STEP; uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + currentDutyCycle, goingDown); @@ -157,7 +155,7 @@ public class MagicSpotsFinder { public void run() { state = State.START; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Start!"); + MessagesCentral.getInstance().postMessage(getClass(), "Start!"); resetValues(); uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + currentDutyCycle, goingUp); @@ -210,7 +208,7 @@ public class MagicSpotsFinder { private void sleep(long millis) { try { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Sleeping " + millis + "ms"); + MessagesCentral.getInstance().postMessage(getClass(), "Sleeping " + millis + "ms"); Thread.sleep(millis); } catch (InterruptedException unexpected) { unexpected.printStackTrace(); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java b/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java index a7bf5377ab..043ec92fd9 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java @@ -1,5 +1,6 @@ package com.rusefi.ui.light; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import javax.swing.*; @@ -8,8 +9,10 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.HttpURLConnection; import java.net.URL; +import java.util.concurrent.ThreadFactory; public class InternetStatus { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("InternetStatus"); private static final String GOOGLE = "http://google.com"; private final JPanel panel = new JPanel(); private final JLabel status = new JLabel(); @@ -19,7 +22,7 @@ public class InternetStatus { Font defaultFont = status.getFont(); status.setFont(new Font(defaultFont.getName(), defaultFont.getStyle(), 2 * defaultFont.getSize())); - new Thread(() -> { + THREAD_FACTORY.newThread(() -> { while (true) { boolean isConnected = isServerReachable(); try { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java b/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java index c7add02055..97eb74284a 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java @@ -179,7 +179,7 @@ public class LogViewer extends JPanel { EngineState.EngineStateListener listener = new EngineState.EngineStateListenerImpl(); ChartRepository.getInstance().clear(); - EngineState engineState = new EngineState(listener, FileLog.LOGGER); + EngineState engineState = new EngineState(listener); // this is pretty dirty, better OOP desperately needed ConsoleUI.engineSnifferPanel.setOutpinListener(engineState); engineState.registerStringValueAction(EngineReport.ENGINE_CHART, new EngineState.ValueCallback() { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java index 6fbb9ed825..40b7fd07e8 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java @@ -4,6 +4,7 @@ import com.fathzer.soft.javaluator.DoubleEvaluator; import com.rusefi.AutoTest; import com.rusefi.FileLog; import com.rusefi.InfixConverter; +import com.rusefi.NamedThreadFactory; import com.rusefi.core.MessagesCentral; import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; @@ -21,6 +22,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -29,6 +31,7 @@ import java.util.function.Function; * Andrey Belomutskiy, (c) 2013-2020 */ public class AnyCommand { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("AnyCommand"); public static final String KEY = "last_value"; private static final String DECODE_RPN = "decode_rpn"; @@ -136,9 +139,9 @@ public class AnyCommand { String result = prepareEvalCommand(rawCommand); if (result.equals(rawCommand)) { // result was not translated - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Not valid expression"); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Please try eval \"2 + 2\""); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "For RPN use rpn_eval \"2 2 +\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Not valid expression"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Please try eval \"2 + 2\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "For RPN use rpn_eval \"2 2 +\""); } return result; } else if (rawCommand.toLowerCase().startsWith("stim_check" + " ")) { @@ -165,23 +168,23 @@ public class AnyCommand { private static void handleStimulationSelfCheck(String rawCommand, LinkManager linkManager) { String[] parts = rawCommand.split(" ", 4); if (parts.length != 4) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Invalid command length " + parts); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Invalid command length " + parts); return; // let's ignore invalid command } int rpm = Integer.parseInt(parts[1]); int settleTime = Integer.parseInt(parts[2]); int durationTime = Integer.parseInt(parts[3]); - new Thread(new Runnable() { + THREAD_FACTORY.newThread(new Runnable() { @Override public void run() { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Will test with RPM " + rpm + ", settle time" + settleTime + "s and duration" + durationTime + "s"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Will test with RPM " + rpm + ", settle time" + settleTime + "s and duration" + durationTime + "s"); Function callback = new Function() { @Override public Object apply(String status) { if (status == null) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, rpm + " worked!"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, rpm + " worked!"); } else { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, rpm + " failed " + status); + MessagesCentral.getInstance().postMessage(AnyCommand.class, rpm + " failed " + status); } return null; } @@ -201,12 +204,12 @@ public class AnyCommand { private static void handleDecodeRpn(String rawCommand) { String[] parts = rawCommand.split(" ", 2); if (parts.length != 2) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Failed to parse, one argument expected"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Failed to parse, one argument expected"); return; } String argument = unquote(parts[1]); String humanForm = InfixConverter.getHumanInfixFormOrError(argument); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Human form is \"" + humanForm + "\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Human form is \"" + humanForm + "\""); } public static String prepareEvalCommand(String rawCommand) { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java index 4195834a81..4c2866cbd0 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java @@ -1,9 +1,6 @@ package com.rusefi.ui.widgets; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; -import com.rusefi.core.Sensor; -import com.rusefi.core.SensorCentral; import com.rusefi.EcuStimulator; import com.rusefi.io.CommandQueue; @@ -91,7 +88,7 @@ public class PotCommand { public static int getPotResistance(double vout, double vRef) { double r = getR1InVoltageDivider3(vout, vRef, EcuStimulator.getInstance().getInputs().getEngineLoadR2Resistance()); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, PotCommand.class, "VRef=" + vRef + ", needed resistance: " + r); + MessagesCentral.getInstance().postMessage(PotCommand.class, "VRef=" + vRef + ", needed resistance: " + r); // pot command accept resistance and does the conversion itself return (int) r; } diff --git a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java new file mode 100644 index 0000000000..5cbe9a430f --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java @@ -0,0 +1,49 @@ +package com.rusefi; + +import com.rusefi.binaryprotocol.BinaryProtocol; +import com.rusefi.server.Backend; +import com.rusefi.server.UserDetails; +import com.rusefi.server.UserDetailsResolver; +import com.rusefi.server.rusEFISSLContext; +import com.rusefi.tools.online.HttpUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.concurrent.CountDownLatch; + +import static com.rusefi.TestHelper.assertLatch; + +public class BackendTestHelper { + public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { + CountDownLatch applicationServerCreated = new CountDownLatch(1); + try { + backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); + } catch (IOException e) { + throw new IllegalStateException(e); + } + assertLatch(applicationServerCreated); + } + + public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { + CountDownLatch controllerServerCreated = new CountDownLatch(1); + try { + backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); + } catch (IOException e) { + throw new IllegalStateException(e); + } + assertLatch(controllerServerCreated); + } + + @NotNull + public static UserDetailsResolver createTestUserResolver() { + return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6)); + } + + public static void commonServerTest() throws MalformedURLException { + HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST; + BinaryProtocol.DISABLE_LOCAL_CACHE = true; + + rusEFISSLContext.init("certificate/test_pkcs12.jks", "password"); + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 7432f54066..8c57c8919a 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -1,14 +1,20 @@ package com.rusefi; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; import com.opensr5.ini.field.ScalarIniField; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; +import com.rusefi.proxy.client.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.server.*; +import com.rusefi.tools.online.HttpUtil; import org.junit.Before; import org.junit.Test; @@ -18,20 +24,18 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static com.rusefi.TestHelper.createIniField; -import static com.rusefi.TestHelper.prepareImage; -import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT; +import static com.devexperts.logging.Logging.getLogging; +import static com.rusefi.TestHelper.*; import static com.rusefi.Timeouts.SECOND; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class FullServerTest { - private final static Logger logger = Logger.CONSOLE; + private static final Logging log = getLogging(FullServerTest.class); @Before - public void setTestCertificate() throws MalformedURLException { - ServerTest.commonServerTest(); - BinaryProtocol.DISABLE_LOCAL_CACHE = true; + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); } @Test @@ -40,16 +44,34 @@ public class FullServerTest { int value = 241; int userId = 7; + + LocalApplicationProxyContext localApplicationProxyContext = new LocalApplicationProxyContext() { + @Override + public String executeGet(String url) throws IOException { + return HttpUtil.executeGet(url); + } + + @Override + public int serverPortForRemoteApplications() { + return 7003; + } + + @Override + public int authenticatorPort() { + return 7004; + } + }; + CountDownLatch controllerRegistered = new CountDownLatch(1); CountDownLatch applicationClosed = new CountDownLatch(1); UserDetailsResolver userDetailsResolver = authToken -> new UserDetails(authToken.substring(0, 5), userId); int httpPort = 8103; int applicationTimeout = 7 * SECOND; - try (Backend backend = new Backend(userDetailsResolver, httpPort, logger, applicationTimeout) { + try (Backend backend = new Backend(userDetailsResolver, httpPort, applicationTimeout) { @Override - protected void onRegister(ControllerConnectionState controllerConnectionState) { - super.onRegister(controllerConnectionState); + public void register(ControllerConnectionState controllerConnectionState) { + super.register(controllerConnectionState); controllerRegistered.countDown(); } @@ -58,38 +80,45 @@ public class FullServerTest { super.close(applicationConnectionState); applicationClosed.countDown(); } - }; LinkManager clientManager = new LinkManager(logger)) { + }; LinkManager clientManager = new LinkManager().setNeedPullData(false)) { int serverPortForControllers = 7001; - int serverPortForRemoteUsers = 7003; // first start backend server - TestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + BackendTestHelper.runApplicationConnectorBlocking(backend, localApplicationProxyContext.serverPortForRemoteApplications()); // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); - TestHelper.createVirtualController(controllerPort, controllerImage, logger); + TestHelper.createVirtualController(controllerPort, controllerImage, new BinaryProtocolServer.Context()); + NetworkConnectorContext networkConnectorContext = new NetworkConnectorContext() { + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); + ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); - assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + TestHelper.assertLatch("controllerRegistered", controllerRegistered); - SessionDetails authenticatorSessionDetails = new SessionDetails(deviceSessionDetails.getControllerInfo(), MockRusEfiDevice.TEST_TOKEN_3, deviceSessionDetails.getOneTimeToken()); - ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userId); + SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); + ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1)); // start authenticator - int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort); + LocalApplicationProxy.startAndRun(localApplicationProxyContext, applicationRequest, httpPort, + TcpIoStream.DisconnectListener.VOID, + LocalApplicationProxy.ConnectionListener.VOID); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // connect to proxy and read virtual controller through it - clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + authenticatorPort, new ConnectionStateListener() { + clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + localApplicationProxyContext.authenticatorPort(), new ConnectionStateListener() { @Override public void onConnectionEstablished() { connectionEstablishedCountDownLatch.countDown(); @@ -100,7 +129,7 @@ public class FullServerTest { System.out.println("Failed"); } }); - assertTrue("Proxied ECU Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Proxied ECU Connection established", connectionEstablishedCountDownLatch); BinaryProtocol clientStreamState = clientManager.getCurrentStreamState(); Objects.requireNonNull(clientStreamState, "clientStreamState"); @@ -112,11 +141,10 @@ public class FullServerTest { assertEquals(1, applicationClosed.getCount()); // now let's test that application connector would be terminated by server due to inactivity - System.out.println("Sleeping twice the application timeout"); + log.info("Sleeping twice the application timeout"); assertTrue(applicationClosed.await(2 * applicationTimeout, TimeUnit.MILLISECONDS)); assertEquals("applications size", 0, backend.getApplications().size()); } } - } diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java deleted file mode 100644 index c640cd9d2a..0000000000 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.rusefi; - -import com.opensr5.Logger; -import com.rusefi.config.generated.Fields; -import com.rusefi.io.tcp.BinaryProtocolServer; -import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.proxy.BaseBroadcastingThread; -import com.rusefi.server.ControllerInfo; -import com.rusefi.server.SessionDetails; -import com.rusefi.server.rusEFISSLContext; - -import java.io.IOException; -import java.net.Socket; - -import static com.rusefi.TestHelper.LOCALHOST; - -public class MockRusEfiDevice { - public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012"; - public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012"; - private SessionDetails sessionDetails; - private final Logger logger; - - public MockRusEfiDevice(String authToken, String signature, Logger logger) { - sessionDetails = createTestSession(authToken, signature); - this.logger = logger; - } - - public static SessionDetails createTestSession(String authToken, String signature) { - ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature); - - return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); - } - - public void connect(int serverPort) throws IOException { - Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); - BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, - sessionDetails, - logger) { - @Override - protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { - super.handleCommand(packet, stream); - - if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { - byte[] response = new byte[1 + Fields.TS_OUTPUT_SIZE]; - response[0] = (byte) BinaryProtocolServer.TS_OK.charAt(0); - stream.sendPacket(response, logger); - } - } - }; - baseBroadcastingThread.start(); - } -} diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 5b95c6376a..39cf0ef246 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -1,25 +1,30 @@ package com.rusefi; -import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.proxy.BaseBroadcastingThread; +import com.rusefi.proxy.NetworkConnectorContext; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.*; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import com.rusefi.tools.online.PublicSession; -import org.jetbrains.annotations.NotNull; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.MalformedURLException; +import java.net.Socket; import java.util.List; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import static com.rusefi.TestHelper.LOCALHOST; +import static com.rusefi.TestHelper.assertLatch; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; /** * integration test of the rusEFI online backend process @@ -28,17 +33,9 @@ import static org.junit.Assert.assertTrue; * https://github.com/rusefi/web_backend/blob/master/documentation/rusEFI%20remote.png */ public class ServerTest { - private final static Logger logger = Logger.CONSOLE; - @Before - public void setTestCertificate() throws MalformedURLException { - commonServerTest(); - } - - static void commonServerTest() throws MalformedURLException { - HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST; - - rusEFISSLContext.init("certificate/test_pkcs12.jks", "password"); + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); } @Test @@ -53,7 +50,7 @@ public class ServerTest { CountDownLatch allConnected = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override public void register(ControllerConnectionState clientConnectionState) { super.register(clientConnectionState); @@ -75,14 +72,14 @@ public class ServerTest { }) { backend.runControllerConnector(serverPortForControllers, parameter -> serverCreated.countDown()); - assertTrue(serverCreated.await(30, TimeUnit.SECONDS)); + assertLatch(serverCreated); assertEquals(0, backend.getControllersCount()); - new MockRusEfiDevice(MockRusEfiDevice.TEST_TOKEN_1, "rusEFI 2020.07.06.frankenso_na6.2468827536", logger).connect(serverPortForControllers); - new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", "rusEFI 2020.07.11.proteus_f4.1986715563", logger).connect(serverPortForControllers); + new MockNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers); + new MockNetworkConnector("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers); - assertTrue("onConnected", onConnected.await(30, TimeUnit.SECONDS)); + assertLatch("onConnected", onConnected); List clients = backend.getControllers(); assertEquals(2, clients.size()); @@ -92,7 +89,7 @@ public class ServerTest { allConnected.countDown(); - assertTrue("allClientsDisconnected", allClientsDisconnected.await(30, TimeUnit.SECONDS)); + assertLatch("allClientsDisconnected", allClientsDisconnected); } } @@ -126,7 +123,7 @@ covered by FullServerTest TestHelper.createVirtualController(controllerPort, new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE), logger); // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + SessionDetails deviceSessionDetails = NetworkConnector.start(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); @@ -143,7 +140,7 @@ covered by FullServerTest int httpPort = 8001; int serverPortForRemoteUsers = 6801; CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -151,21 +148,16 @@ covered by FullServerTest } }) { - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); // start authenticator - IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); - new HelloCommand(logger, "hello").handle(authenticatorToProxyStream); + IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers); + new HelloCommand("hello").handle(authenticatorToProxyStream); - assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(disconnectedCountDownLatch); } } - @NotNull - private static UserDetailsResolver createTestUserResolver() { - return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6)); - } - @Test public void testAuthenticatorRequestUnknownSession() throws InterruptedException, IOException { int serverPortForRemoteUsers = 6800; @@ -174,7 +166,7 @@ covered by FullServerTest CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -182,17 +174,42 @@ covered by FullServerTest } }) { - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); - SessionDetails sessionDetails = MockRusEfiDevice.createTestSession(MockRusEfiDevice.TEST_TOKEN_1, Fields.TS_SIGNATURE); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, 123); + SessionDetails sessionDetails = TestHelper.createTestSession(TestHelper.TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, BackendTestHelper.createTestUserResolver().apply(TestHelper.TEST_TOKEN_1)); // start authenticator - IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); - localApplicationProxy.run(authenticatorToProxyStream); + IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers); + LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(disconnectedCountDownLatch); } } + + private static class MockNetworkConnector { + private final SessionDetails sessionDetails; + + private MockNetworkConnector(String authToken, String signature) { + sessionDetails = TestHelper.createTestSession(authToken, signature); + } + + public void connect(int serverPort) throws IOException { + Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); + BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, + sessionDetails, + TcpIoStream.DisconnectListener.VOID, new NetworkConnectorContext()) { + @Override + protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { + super.handleCommand(packet, stream); + + if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { + GetOutputsCommand.sendOutput(stream); + } + } + }; + baseBroadcastingThread.start(); + } + + } } diff --git a/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java b/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java index 3b30ebe946..3cd98c65af 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java +++ b/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java @@ -1,11 +1,8 @@ package com.rusefi.io; import com.opensr5.ConfigurationImage; -import com.rusefi.FileLog; import com.rusefi.binaryprotocol.BinaryProtocolState; import com.rusefi.config.generated.Fields; -import com.rusefi.io.LinkConnector; -import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.BinaryProtocolServer; class BinaryProtocolServerSandbox { @@ -14,8 +11,8 @@ class BinaryProtocolServerSandbox { state.setController(new ConfigurationImage(new byte[Fields.TOTAL_CONFIG_SIZE])); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); linkManager.setConnector(LinkConnector.getDetachedConnector(state)); - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } } \ No newline at end of file diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index e593408881..cb1c3a4a19 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -10,12 +10,13 @@ import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; import org.junit.Test; +import java.io.IOException; import java.util.Objects; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import static com.rusefi.TestHelper.assertLatch; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; public class TcpCommunicationIntegrationTest { private static final Logger LOGGER = Logger.CONSOLE; @@ -27,7 +28,7 @@ public class TcpCommunicationIntegrationTest { CountDownLatch failedCountDownLatch = new CountDownLatch(1); - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(Integer.toString(port), new ConnectionStateListener() { @Override public void onConnectionEstablished() { @@ -41,7 +42,7 @@ public class TcpCommunicationIntegrationTest { } }); - assertTrue(failedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(failedCountDownLatch); } @Test @@ -51,13 +52,13 @@ public class TcpCommunicationIntegrationTest { ConfigurationImage serverImage = TestHelper.prepareImage(value, iniField); int port = 6100; - BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage, LOGGER); + BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage, new BinaryProtocolServer.Context()); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // todo: remove CONFIGURATION_RUSEFI_BINARY or nicer API to disable local file load - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + port, new ConnectionStateListener() { @Override public void onConnectionEstablished() { @@ -69,7 +70,7 @@ public class TcpCommunicationIntegrationTest { System.out.println("Failed"); } }); - assertTrue("Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Connection established", connectionEstablishedCountDownLatch); assertEquals(0, server.unknownCommands.get()); @@ -83,23 +84,23 @@ public class TcpCommunicationIntegrationTest { } @Test - public void testProxy() throws InterruptedException { + public void testProxy() throws InterruptedException, IOException { ConfigurationImage serverImage = TestHelper.prepareImage(239, TestHelper.createIniField(Fields.CYLINDERSCOUNT)); int controllerPort = 6102; // create virtual controller - TestHelper.createVirtualController(controllerPort, serverImage, LOGGER); + TestHelper.createVirtualController(controllerPort, serverImage, new BinaryProtocolServer.Context()); int proxyPort = 6103; // connect proxy to virtual controller IoStream targetEcuSocket = TestHelper.connectToLocalhost(controllerPort, LOGGER); - BinaryProtocolProxy.createProxy(LOGGER, targetEcuSocket, proxyPort); + BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort, new AtomicInteger()); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // connect to proxy and read virtual controller through it - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + proxyPort, new ConnectionStateListener() { @Override public void onConnectionEstablished() { @@ -111,7 +112,7 @@ public class TcpCommunicationIntegrationTest { System.out.println("Failed"); } }); - assertTrue("Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Connection established", connectionEstablishedCountDownLatch); clientManager.close(); } diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java new file mode 100644 index 0000000000..19ab1938e0 --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -0,0 +1,109 @@ +package com.rusefi.proxy; + +import com.devexperts.logging.Logging; +import com.opensr5.ConfigurationImage; +import com.rusefi.BackendTestHelper; +import com.rusefi.TestHelper; +import com.rusefi.Timeouts; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.server.Backend; +import com.rusefi.server.ControllerConnectionState; +import org.junit.Before; +import org.junit.Test; + +import java.net.MalformedURLException; +import java.util.concurrent.CountDownLatch; + +import static com.devexperts.logging.Logging.getLogging; +import static com.rusefi.TestHelper.assertLatch; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; + +public class NetworkConnectorTest { + private static final Logging log = getLogging(NetworkConnectorTest.class); + + @Before + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); + } + + @Test + public void testReconnect() throws InterruptedException { + int serverPortForControllers = 7504; + int httpPort = 7503; + + // create virtual controller to which "rusEFI network connector" connects to + int controllerPort = 7502; + ConfigurationImage controllerImage = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); + BinaryProtocolServer.Context patientController = new BinaryProtocolServer.Context() { + @Override + public int getTimeout() { + // we need controller to not timeout while we are playing with all backend shutdowns + return 5 * Timeouts.MINUTE; + } + }; + TestHelper.createVirtualController(controllerPort, controllerImage, patientController); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext() { + @Override + public int reconnectDelay() { + return 3; + } + + @Override + public int firstPacketTimeout() { + return 3 * Timeouts.SECOND; + } + + @Override + public int consecutivePacketTimeout() { + return 3 * Timeouts.SECOND; + } + + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; + + CountDownLatch reconnectCounter = new CountDownLatch(1); + + // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network + NetworkConnector.ReconnectListener reconnectListener = new NetworkConnector.ReconnectListener() { + @Override + public void onReconnect() { + reconnectCounter.countDown(); + } + }; + new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); + + assertLatch(reconnectCounter); + + // start backend, assert connection, stop backend + log.info("First backend instance"); + assertWouldConnect(serverPortForControllers, httpPort); + + // giving http server time to shut down + sleep(3 * Timeouts.SECOND); + + // now let's do this again with a new backend instance + log.info("Second backend instance"); + assertWouldConnect(serverPortForControllers, httpPort); + } + + private void assertWouldConnect(int serverPortForControllers, int httpPort) throws InterruptedException { + CountDownLatch onControllerRegistered = new CountDownLatch(1); + Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { + @Override + public void register(ControllerConnectionState controllerConnectionState) { + super.register(controllerConnectionState); + onControllerRegistered.countDown(); + } + }; + BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + + // assert that reconnect actually happened + assertLatch(onControllerRegistered); + backend.close(); + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java new file mode 100644 index 0000000000..2680c2308f --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -0,0 +1,142 @@ +package com.rusefi.proxy.client; + +import com.rusefi.BackendTestHelper; +import com.rusefi.TestHelper; +import com.rusefi.Timeouts; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; +import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.ServerSocketReference; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.server.ApplicationRequest; +import com.rusefi.server.SessionDetails; +import com.rusefi.tools.online.ProxyClient; +import org.jetbrains.annotations.NotNull; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; + +import static com.rusefi.BackendTestHelper.createTestUserResolver; +import static com.rusefi.TestHelper.TEST_TOKEN_1; +import static com.rusefi.TestHelper.assertLatch; +import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.binaryprotocol.BinaryProtocol.findCommand; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; +import static com.rusefi.shared.FileUtil.close; + +public class LocalApplicationProxyTest { + private static final AtomicInteger portNumber = new AtomicInteger(4000); + + @Before + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); + } + + @Test + public void testDisconnectCallback() throws IOException, InterruptedException { + LocalApplicationProxyContext context = createLocalApplicationProxy(); + + CountDownLatch backendCreated = new CountDownLatch(1); + ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", socket -> () -> { + sleep(Timeouts.SECOND); + close(socket); + }, parameter -> backendCreated.countDown()); + assertLatch(backendCreated); + + SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); + + CountDownLatch disconnected = new CountDownLatch(1); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, (String message) -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); + + assertLatch(disconnected); + mockBackend.close(); + } + + @Test + public void testGaugePoking() throws IOException, InterruptedException { + LocalApplicationProxyContext context = createLocalApplicationProxy(); + + CountDownLatch gaugePokes = new CountDownLatch(3); + + CountDownLatch backendCreated = new CountDownLatch(1); + ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", socket -> () -> { + try { + IoStream applicationClientStream = new TcpIoStream("gauge", socket); + + HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); + + while (!socket.isClosed()) { + BinaryProtocolServer.Packet packet = applicationClientStream.readPacket(); + System.out.println("Got packet " + findCommand(packet.getPacket()[0])); + + if (packet.getPacket().length != 5) + throw new IllegalStateException(); + + GetOutputsCommand.sendOutput(applicationClientStream); + gaugePokes.countDown(); + } + } catch (IOException e) { + throw new IllegalStateException(e); + } + + }, parameter -> backendCreated.countDown()); + + assertLatch(backendCreated); + + SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); + + CountDownLatch disconnected = new CountDownLatch(1); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, (String message) -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); + + // wait for three output requests to take place + assertLatch("gaugePokes", gaugePokes); + + // but there must be a disconnect after some time + assertLatch("disconnected", disconnected); + + mockBackend.close(); + } + + @NotNull + private LocalApplicationProxyContext createLocalApplicationProxy() { + return new LocalApplicationProxyContext() { + private final int remotePort = portNumber.incrementAndGet(); + private final int authenticatorPort = portNumber.incrementAndGet(); + + @Override + public String executeGet(String url) { + if (url.endsWith(ProxyClient.VERSION_PATH)) + return ProxyClient.BACKEND_VERSION; + throw new UnsupportedOperationException(url); + } + + @Override + public int serverPortForRemoteApplications() { + return remotePort; + } + + @Override + public int authenticatorPort() { + return authenticatorPort; + } + + @Override + public int startUpIdle() { + return 7 * Timeouts.SECOND; + } + + @Override + public int gaugePokingPeriod() { + return SECOND; + } + }; + } +} diff --git a/java_console/ui/ui.iml b/java_console/ui/ui.iml index 6e6a8fb20c..2d9c43ef0c 100644 --- a/java_console/ui/ui.iml +++ b/java_console/ui/ui.iml @@ -28,7 +28,8 @@ - + + \ No newline at end of file diff --git a/java_tools/proxy_server/build.gradle b/java_tools/proxy_server/build.gradle new file mode 100644 index 0000000000..378b881df0 --- /dev/null +++ b/java_tools/proxy_server/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'java' +} + +dependencies { + implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3' + implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3' + implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' +} \ No newline at end of file diff --git a/java_tools/proxy_server/proxy_server.iml b/java_tools/proxy_server/proxy_server.iml index e317acc97b..e9e81508f0 100644 --- a/java_tools/proxy_server/proxy_server.iml +++ b/java_tools/proxy_server/proxy_server.iml @@ -15,5 +15,6 @@ + \ No newline at end of file diff --git a/java_tools/proxy_server/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java b/java_tools/proxy_server/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java new file mode 100644 index 0000000000..2ab6e19f3f --- /dev/null +++ b/java_tools/proxy_server/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java @@ -0,0 +1,114 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import org.apache.logging.log4j.core.Layout; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.DefaultConfiguration; +import org.apache.logging.log4j.core.config.Node; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.core.layout.AbstractStringLayout; +import org.apache.logging.log4j.core.layout.ByteBufferDestination; +import org.apache.logging.log4j.core.layout.Encoder; +import org.apache.logging.log4j.core.pattern.MessagePatternConverter; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.util.Collections; +import java.util.Map; +import java.util.function.BiConsumer; + +/** + * Custom pattern layout for log4j2. Message formatting is delegated to {@link LogFormatter}. + */ +@SuppressWarnings("unused") //used by Log4j2 +@Plugin(name = "dxFeedPatternLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true) +public class DxFeedPatternLayout extends AbstractStringLayout { + private static final String LINE_SEP = DefaultLogging.getProperty("line.separator", "\n"); + + private final BiConsumer msgConsumer; + private final LogFormatter logFormatter; + + private DxFeedPatternLayout(Configuration configuration) { + super(configuration, Charset.defaultCharset(), null, null); + MessagePatternConverter messagePatternConverter = MessagePatternConverter.newInstance(configuration, null); + msgConsumer = (o, sb) -> { + // Format message + messagePatternConverter.format(o, sb); + if (o instanceof LogEvent) { + // Format exception + Throwable throwable = ((LogEvent)o).getThrown(); + if (throwable != null) { + sb.append(LINE_SEP); + StringWriter w = new StringWriter(); + throwable.printStackTrace(new PrintWriter(w)); + sb.append(w.getBuffer()); + // Remove extra line separator + sb.setLength(sb.length() - LINE_SEP.length()); + } + } + }; + logFormatter = new LogFormatter(); + } + + @Override + public String toSerializable(LogEvent event) { + StringBuilder text = getStringBuilder(); + String s = format(event, text).toString(); + trimToMaxSize(text); + return s; + } + + @Override + public void encode(LogEvent event, ByteBufferDestination destination) { + StringBuilder text = getStringBuilder(); + format(event, text); + Encoder encoder = getStringBuilderEncoder(); + encoder.encode(text, destination); + trimToMaxSize(text); + } + + private StringBuilder format(LogEvent event, StringBuilder text) { + char level = event.getLevel().name().charAt(0); + logFormatter.format(level, event.getTimeMillis(), event.getThreadName(), event.getLoggerName(), msgConsumer, + event, text); + return text; + } + + @Override + public Map getContentFormat() { + return Collections.emptyMap(); + } + + @Override + public String toString() { + return getContentFormat().toString(); + } + + public static DxFeedPatternLayout createDefaultLayout() { + return createDefaultLayout(null); + } + + /** + * Creates a DxFeedPatternLayout using the default options and the given configuration. Options include using UTF-8. + */ + @PluginFactory + public static DxFeedPatternLayout createDefaultLayout(@PluginConfiguration Configuration configuration) { + if (configuration == null) + configuration = new DefaultConfiguration(); + return new DxFeedPatternLayout(configuration); + } +} diff --git a/java_tools/proxy_server/src/main/java/com/devexperts/logging/Log4j2Logging.java b/java_tools/proxy_server/src/main/java/com/devexperts/logging/Log4j2Logging.java new file mode 100644 index 0000000000..a9da590cc0 --- /dev/null +++ b/java_tools/proxy_server/src/main/java/com/devexperts/logging/Log4j2Logging.java @@ -0,0 +1,187 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.appender.RollingFileAppender; +import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.NullConfiguration; +import org.apache.logging.log4j.core.filter.ThresholdFilter; +import org.apache.logging.log4j.core.layout.AbstractStringLayout; +import org.apache.logging.log4j.message.SimpleMessage; +import org.apache.logging.log4j.status.StatusLogger; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.logging.Level; + +import static org.apache.logging.log4j.Level.DEBUG; +import static org.apache.logging.log4j.Level.ERROR; +import static org.apache.logging.log4j.Level.INFO; +import static org.apache.logging.log4j.Level.OFF; +import static org.apache.logging.log4j.Level.WARN; +import static org.apache.logging.log4j.core.Filter.Result.ACCEPT; +import static org.apache.logging.log4j.core.Filter.Result.DENY; +import static org.apache.logging.log4j.core.config.ConfigurationSource.NULL_SOURCE; + +/** + * Logging implementation that uses log4j2 logging facilities. + */ +class Log4j2Logging extends DefaultLogging { + private static final String FQCN = Logging.class.getName() + "."; + + static { + StatusLogger.getLogger().setLevel(OFF); + } + + @Override + Map configure() { + LoggerContext ctx = (LoggerContext)LogManager.getContext(false); + if (ctx.getConfiguration().getConfigurationSource() != NULL_SOURCE) + return Collections.emptyMap(); // do nothing since log4j2 was already configured + return configureLogFile(getProperty(Logging.LOG_FILE_PROPERTY, null)); + } + + private static Map reconfigure(String logFile) { + LoggerContext ctx = (LoggerContext)LogManager.getContext(false); + Configuration config = ctx.getConfiguration(); + + Map errors = new LinkedHashMap<>(); + config.getRootLogger().setLevel(DEBUG); + String errFile = getProperty(Logging.ERR_FILE_PROPERTY, null); + for (Map.Entry entry : config.getRootLogger().getAppenders().entrySet()) { + entry.getValue().stop(); + // Safe to delete here since config.getRootLogger().getAppenders() returns new map + config.getRootLogger().removeAppender(entry.getKey()); + } + + Appender appender = null; + if (logFile != null) { + try { + appender = createFileAppender("common", logFile, Logging.LOG_MAX_FILE_SIZE_PROPERTY, errors); + } catch (Exception e) { + errors.put(logFile, e); + } + } + + if (appender == null) + appender = ConsoleAppender.newBuilder() + .withName("common") + .withLayout(getDetailedLayout()) + .setTarget(ConsoleAppender.Target.SYSTEM_OUT) + .build(); + + config.getRootLogger().addAppender(appender, DEBUG, + errFile == null ? null : ThresholdFilter.createFilter(WARN, DENY, ACCEPT)); + + if (errFile != null) { + try { + Appender errAppender = createFileAppender("error", errFile, Logging.ERR_MAX_FILE_SIZE_PROPERTY, errors); + config.getRootLogger().addAppender(errAppender, WARN, ThresholdFilter.createFilter(WARN, ACCEPT, DENY)); + } catch (Exception e) { + errors.put(errFile, e); + } + } + ctx.updateLoggers(); + return errors; + } + + private static AbstractStringLayout getDetailedLayout() { + return DxFeedPatternLayout.createDefaultLayout(null); + } + + private static RollingFileAppender createFileAppender(String name, String logFile, String maxSizeKey, + Map errors) + { + RollingFileAppender.Builder builder = RollingFileAppender.newBuilder(); + builder.setConfiguration(new NullConfiguration()); + builder.withName(name); + builder.withLayout(getDetailedLayout()); + builder.withFileName(logFile); + builder.withFilePattern(logFile); + builder.withAppend(true); + builder.withImmediateFlush(true); + + int limit = getLimit(maxSizeKey, errors); + if (limit == 0) + limit = 900 * 1024 * 1024; // Default in Logging.DEFAULT_MAX_FILE_SIZE + builder.withPolicy(SizeBasedTriggeringPolicy.createPolicy(Integer.toString(limit))); + + return builder.build(); + } + + @Override + Map configureLogFile(String logFile) { + return reconfigure(logFile); + } + + @Override + Object getPeer(String name) { + return LogManager.getLogger(name); + } + + @Override + String getName(Object peer) { + return ((Logger)peer).getName(); + } + + @Override + boolean debugEnabled(Object peer) { + return ((Logger)peer).isDebugEnabled(); + } + + @Override + void setDebugEnabled(Object peer, boolean debugEnabled) { + ((Logger)peer).setLevel(debugEnabled ? DEBUG : INFO); + } + + @Override + void log(Object peer, Level level, String msg, Throwable t) { + org.apache.logging.log4j.Level priority; + if (level.intValue() <= Level.FINE.intValue()) + priority = DEBUG; + else if (level.intValue() <= Level.INFO.intValue()) + priority = INFO; + else if (level.intValue() <= Level.WARNING.intValue()) + priority = WARN; + else + priority = ERROR; + + if (!((Logger)peer).isEnabled(priority)) + return; + + // Before calling log4j logger we must clear "interrupted" flag from current thread. + // If this flag is "true", log4j will log error in 1 appender only (and probably clear the flag). + // We will re-establish "interrupted" flag later. + boolean interrupted = Thread.interrupted(); + try { + ((Logger)peer).logMessage(FQCN, priority, null, new SimpleMessage(msg == null ? "" : msg), t); + } catch (Exception e) { + System.err.println(new LogFormatter().format('E', System.currentTimeMillis(), + Thread.currentThread().getName(), "Log4j", e + " during logging of " + msg)); + if (!(e instanceof IllegalStateException) || e.getMessage() == null || + !e.getMessage().equals("Current state = FLUSHED, new state = CODING")) + { + e.printStackTrace(System.err); + } + } finally { + if (interrupted) + Thread.currentThread().interrupt(); + } + } +} diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java deleted file mode 100644 index 9f1cfb639e..0000000000 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.rusefi.proxy; - -import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; -import com.rusefi.binaryprotocol.BinaryProtocol; -import com.rusefi.config.generated.Fields; -import com.rusefi.io.ConnectionStateListener; -import com.rusefi.io.IoStream; -import com.rusefi.io.LinkManager; -import com.rusefi.io.commands.HelloCommand; -import com.rusefi.io.tcp.BinaryProtocolServer; -import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.server.ControllerInfo; -import com.rusefi.server.SessionDetails; -import com.rusefi.server.rusEFISSLContext; -import com.rusefi.tools.online.HttpUtil; -import org.jetbrains.annotations.NotNull; - -import java.io.IOException; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * Connector between rusEFI ECU and rusEFI server - */ -public class NetworkConnector { - public static SessionDetails runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers) throws InterruptedException, IOException { - LinkManager linkManager = new LinkManager(Logger.CONSOLE) - .setCompositeLogicEnabled(false) - .setNeedPullData(false); - - CountDownLatch onConnected = new CountDownLatch(1); - linkManager.startAndConnect(controllerPort, new ConnectionStateListener() { - @Override - public void onConnectionEstablished() { - onConnected.countDown(); - } - - @Override - public void onConnectionFailed() { - - } - }); - - Logger.CONSOLE.info("Connecting to controller..."); - onConnected.await(1, TimeUnit.MINUTES); - if (onConnected.getCount() != 0) { - Logger.CONSOLE.info("Connection to controller failed"); - return null; - } - - return runNetworkConnector(serverPortForControllers, linkManager, Logger.CONSOLE, authToken); - } - - @NotNull - private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, final Logger logger, String authToken) throws IOException { - IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); - HelloCommand.send(targetEcuSocket, logger); - String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer(), logger); - if (helloResponse == null) - throw new IOException("Error getting hello response"); - String controllerSignature = helloResponse.trim(); - - ConfigurationImage image = linkManager.getConnector().getBinaryProtocol().getControllerConfiguration(); - String vehicleName = Fields.VEHICLENAME.getStringValue(image); - String engineMake = Fields.ENGINEMAKE.getStringValue(image); - String engineCode = Fields.ENGINECODE.getStringValue(image); - ControllerInfo ci = new ControllerInfo(vehicleName, engineMake, engineCode, controllerSignature); - - SessionDetails deviceSessionDetails = new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); - - BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers), - deviceSessionDetails, - logger) { - @Override - protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { - super.handleCommand(packet, stream); - logger.info("Relaying request to controller " + BinaryProtocol.findCommand(packet.getPacket()[0])); - targetEcuSocket.sendPacket(packet); - - BinaryProtocolServer.Packet response = targetEcuSocket.readPacket(); - logger.info("Relaying response to proxy size=" + response.getPacket().length); - stream.sendPacket(response); - } - }; - baseBroadcastingThread.start(); - return deviceSessionDetails; - } -} diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ApplicationConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ApplicationConnectionState.java index d4acea6404..f8d5d80950 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ApplicationConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ApplicationConnectionState.java @@ -10,6 +10,7 @@ public class ApplicationConnectionState { @NotNull private final IoStream clientStream; private final ControllerConnectionState state; + private final Birthday birthday = new Birthday(); public ApplicationConnectionState(UserDetails userDetails, IoStream clientStream, ControllerConnectionState state) { this.userDetails = Objects.requireNonNull(userDetails, "userDetails"); @@ -31,6 +32,10 @@ public class ApplicationConnectionState { return userDetails; } + public Birthday getBirthday() { + return birthday; + } + public void close() { try { clientStream.close(); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 48c1ec2579..cd83b16067 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -1,7 +1,8 @@ package com.rusefi.server; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Listener; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.Sensor; @@ -9,35 +10,57 @@ import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.shared.FileUtil; import com.rusefi.tools.online.ProxyClient; import net.jcip.annotations.GuardedBy; import org.jetbrains.annotations.NotNull; import org.takes.Take; import org.takes.facets.fork.FkRegex; import org.takes.facets.fork.TkFork; -import org.takes.http.FtBasic; +import org.takes.http.*; import org.takes.rs.RsHtml; import org.takes.rs.RsJson; import javax.json.Json; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; import java.io.Closeable; import java.io.IOException; import java.net.BindException; import java.util.*; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.server.Birthday.humanReadableFormat; /** - * See NetworkConnectorStartup + * See NetworkConnectorStartup - NetworkConnector connects an ECU to this backend + * + * @see ControllerConnectionState ECU session + * @see ApplicationConnectionState tuning application session + * @see BackendLauncher */ public class Backend implements Closeable { - public static final int SERVER_PORT_FOR_CONTROLLERS = 8003; + private static final Logging log = getLogging(Backend.class); + private static final String MAX_PACKET_GAP = "MAX_PACKET_GAP"; - private static final String IS_USED = "isUsed"; + + /** + * Application with exclusive access should connect tuning application within 3 minutes + * Should be at least twice less than USER_IO_TIMEOUT to prevent controller disconnect + * + * @see BinaryProtocolProxy#USER_IO_TIMEOUT + */ + private static final int APPLICATION_INACTIVITY_TIMEOUT = 3 * Timeouts.MINUTE; + static final String AGE = "age"; + private static final ThreadFactory APPLLICATION_CONNECTION_CLEANUP = new NamedThreadFactory("rusEFI Application connections Cleanup"); + private static final ThreadFactory GAUGE_POKER = new NamedThreadFactory("rusEFI gauge poker"); private final FkRegex showOnlineControllers = new FkRegex(ProxyClient.LIST_CONTROLLERS_PATH, (Take) req -> getControllersOnline() @@ -61,67 +84,66 @@ public class Backend implements Closeable { private final int applicationTimeout; private final UserDetailsResolver userDetailsResolver; - private final Logger logger; public final static AtomicLong totalSessions = new AtomicLong(); public int serverPortForApplications; public int serverPortForControllers; + private ServerSocketReference applicationConnector; + private ServerSocketReference controllerConnector; - public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger) { - this(userDetailsResolver, httpPort, logger, Timeouts.READ_IMAGE_TIMEOUT); + public Backend(UserDetailsResolver userDetailsResolver, int httpPort) { + this(userDetailsResolver, httpPort, APPLICATION_INACTIVITY_TIMEOUT); } - public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger, int applicationTimeout) { + public Backend(UserDetailsResolver userDetailsResolver, int httpPort, int applicationTimeout) { this.applicationTimeout = applicationTimeout; this.userDetailsResolver = userDetailsResolver; - this.logger = logger; new Thread(() -> { try { - System.out.println("Starting http backend on " + httpPort); + log.info("Starting http backend on " + httpPort); try { - new FtBasic( - new TkFork(showOnlineControllers, - showOnlineApplications, - new Monitoring(this).showStatistics, - new FkRegex(ProxyClient.VERSION_PATH, ProxyClient.BACKEND_VERSION), - new FkRegex("/", new RsHtml("\n" + - "rusEFI Online\n" + - "
\n" + - "Status\n" + - "
\n" + - "Version\n" + - "Controllers\n" + - "Applications\n" + - "
\n" + - "
\n" + - "\n")) - ), httpPort - ).start(() -> isClosed); + Take forkTake = new TkFork(showOnlineControllers, + showOnlineApplications, + new Monitoring(this).showStatistics, + new FkRegex(ProxyClient.VERSION_PATH, ProxyClient.BACKEND_VERSION), + new FkRegex("/", new RsHtml("\n" + + "
rusEFI Online\n" + + "


\n" + + "" + + "


\n" + + "


Status\n" + + "


Version\n" + + "


Controllers\n" + + "


Applications\n" + + "\n")) + ); + Front frontEnd = new FtBasic(new BkParallel(new BkSafe(new BkBasic(forkTake)), 4), httpPort); + frontEnd.start(() -> isClosed()); } catch (BindException e) { throw new IllegalStateException("While binding " + httpPort, e); } - logger.info("Shutting down backend on port " + httpPort); + log.info("Shutting down backend on port " + httpPort); } catch (IOException e) { throw new IllegalStateException(e); } }, "Http Server Thread").start(); - new Thread(() -> { - while (true) { - logger.info(getApplicationsCount() + " applications, " + getControllersCount() + " controllers"); + APPLLICATION_CONNECTION_CLEANUP.newThread(() -> { + while (!isClosed()) { + log.info(getApplicationsCount() + " applications, " + getControllersCount() + " controllers"); runApplicationConnectionsCleanup(); BinaryProtocol.sleep(applicationTimeout); } - }, "rusEFI Application connections Cleanup").start(); + }).start(); - new Thread(() -> { - while (true) { + GAUGE_POKER.newThread(() -> { + while (!isClosed()) { grabOutputs(); BinaryProtocol.sleep(SECOND); } - }, "rusEFI gauge poker").start(); + }).start(); } private void grabOutputs() { @@ -139,39 +161,42 @@ public class Backend implements Closeable { } } - public void runApplicationConnector(int serverPortForApplications, Listener serverSocketCreationCallback) { + public void runApplicationConnector(int serverPortForApplications, Listener serverSocketCreationCallback) throws IOException { this.serverPortForApplications = serverPortForApplications; // connection from authenticator app which proxies for Tuner Studio // authenticator pushed hello packet on connect - System.out.println("Starting application connector at " + serverPortForApplications); - BinaryProtocolServer.tcpServerSocket(logger, applicationSocket -> () -> { + log.info("Starting application connector at " + serverPortForApplications); + applicationConnector = BinaryProtocolServer.tcpServerSocket(applicationSocket -> () -> { + log.info("new application connection!"); totalSessions.incrementAndGet(); // connection from authenticator app which proxies for Tuner Studio IoStream applicationClientStream = null; ApplicationConnectionState applicationConnectionState = null; try { - applicationClientStream = new TcpIoStream("[app] ", logger, applicationSocket); + applicationClientStream = new TcpIoStream("[backend-application connector] ", applicationSocket); // authenticator pushed hello packet on connect - String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer(), logger); - if (jsonString == null) + String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); + if (jsonString == null) { + log.error("ERROR: null HELLO"); return; + } ApplicationRequest applicationRequest = ApplicationRequest.valueOf(jsonString); - logger.info("Application Connected: " + applicationRequest); + log.info("Application Connected: " + applicationRequest); String authToken = applicationRequest.getSessionDetails().getAuthToken(); UserDetails userDetails = userDetailsResolver.apply(authToken); if (userDetails == null) { - logger.info("Authentication failed for application " + authToken); + log.info("Authentication failed for application " + authToken); return; } - ControllerKey controllerKey = new ControllerKey(applicationRequest.getTargetUserId(), applicationRequest.getSessionDetails().getControllerInfo()); + ControllerKey controllerKey = new ControllerKey(applicationRequest.getTargetUser().getUserId(), applicationRequest.getSessionDetails().getControllerInfo()); ControllerConnectionState state; synchronized (lock) { - state = acquire(controllerKey); + state = acquire(controllerKey, userDetails); } if (state == null) { - logger.info("No controller for " + controllerKey); + log.info("No controller for " + controllerKey); return; } applicationConnectionState = new ApplicationConnectionState(userDetails, applicationClientStream, state); @@ -179,10 +204,10 @@ public class Backend implements Closeable { applications.add(applicationConnectionState); } - BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream); + BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream, new AtomicInteger()); } catch (Throwable e) { - logger.info("Application Connector: Got error " + e); + log.info("Application Connector: Got error " + e); } finally { if (applicationClientStream != null) applicationClientStream.close(); @@ -191,14 +216,14 @@ public class Backend implements Closeable { }, serverPortForApplications, "ApplicationServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); } - private ControllerConnectionState acquire(ControllerKey controllerKey) { + private ControllerConnectionState acquire(ControllerKey controllerKey, UserDetails userDetails) { synchronized (lock) { ControllerConnectionState state = controllersByKey.get(controllerKey); if (state == null) { // no such controller return null; } - if (!state.getTwoKindSemaphore().acquireForLongTermUsage()) { + if (!state.getTwoKindSemaphore().acquireForLongTermUsage(userDetails)) { // someone is already talking to this controller return null; } @@ -218,15 +243,15 @@ public class Backend implements Closeable { applications.remove(applicationConnectionState); } } - logger.info("Disconnecting application"); + log.info("Disconnecting application " + applicationConnectionState); } - public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) { + public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) throws IOException { this.serverPortForControllers = serverPortForControllers; - logger.info("Starting controller connector at " + serverPortForControllers); - BinaryProtocolServer.tcpServerSocket(logger, controllerSocket -> () -> { + log.info("Starting controller connector at " + serverPortForControllers); + controllerConnector = BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> { totalSessions.incrementAndGet(); - ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, logger, getUserDetailsResolver()); + ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, getUserDetailsResolver()); try { controllerConnectionState.requestControllerInfo(); @@ -235,6 +260,7 @@ public class Backend implements Closeable { register(controllerConnectionState); } catch (Throwable e) { + log.error("runControllerConnector close " + controllerConnectionState, e); close(controllerConnectionState); } }, serverPortForControllers, "ControllerServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); @@ -248,6 +274,7 @@ public class Backend implements Closeable { JsonObject applicationObject = Json.createObjectBuilder() .add(UserDetails.USER_ID, application.getUserDetails().getUserId()) .add(UserDetails.USERNAME, application.getUserDetails().getUserName()) + .add(AGE, application.getBirthday().getDuration()) .add(MAX_PACKET_GAP, application.getClientStream().getStreamStats().getMaxPacketGap()) .build(); builder.add(applicationObject); @@ -264,17 +291,25 @@ public class Backend implements Closeable { // todo: OutputChannel from .ini file based on controller signature int rpm = (int) client.getSensorsHolder().getValue(Sensor.RPM); double clt = client.getSensorsHolder().getValue(Sensor.CLT); - JsonObject controllerObject = Json.createObjectBuilder() + UserDetails owner = client.getTwoKindSemaphore().getOwner(); + JsonObjectBuilder objectBuilder = Json.createObjectBuilder() .add(UserDetails.USER_ID, client.getUserDetails().getUserId()) .add(UserDetails.USERNAME, client.getUserDetails().getUserName()) - .add(IS_USED, client.getTwoKindSemaphore().isUsed()) + .add(AGE, client.getBirthday().getDuration()) + .add("OUTPUT_ROUND_TRIP", client.getOutputRoundAroundDuration()) + .add(ProxyClient.IS_USED, client.getTwoKindSemaphore().isUsed()) .add(ControllerStateDetails.RPM, rpm) .add(ControllerStateDetails.CLT, clt) .add(ControllerInfo.SIGNATURE, client.getSessionDetails().getControllerInfo().getSignature()) .add(ControllerInfo.VEHICLE_NAME, client.getSessionDetails().getControllerInfo().getVehicleName()) .add(ControllerInfo.ENGINE_MAKE, client.getSessionDetails().getControllerInfo().getEngineMake()) .add(ControllerInfo.ENGINE_CODE, client.getSessionDetails().getControllerInfo().getEngineCode()) - .add(MAX_PACKET_GAP, client.getStream().getStreamStats().getMaxPacketGap()) + .add(MAX_PACKET_GAP, client.getStream().getStreamStats().getMaxPacketGap()); + if (owner != null) { + objectBuilder = objectBuilder.add(ProxyClient.OWNER, owner.getUserName()); + } + + JsonObject controllerObject = objectBuilder .build(); builder.add(controllerObject); } @@ -290,18 +325,29 @@ public class Backend implements Closeable { * that's different from controllers since we periodically pull outputs from controllers which allows us to detect disconnects */ private void runApplicationConnectionsCleanup() { - List inactiveApplications = new ArrayList<>(); - + List applications; synchronized (lock) { - long now = System.currentTimeMillis(); - for (ApplicationConnectionState client : applications) { - if (now - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime() > applicationTimeout) - inactiveApplications.add(client); + applications = new ArrayList<>(this.applications); + } + + for (ApplicationConnectionState client : applications) { + long timeSinceLastActivity = System.currentTimeMillis() - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime(); + if (timeSinceLastActivity > applicationTimeout) { + log.error("Kicking out application " + client); + close(client); + } else { + log.info("Looks alive " + client + " time since last activity: " + humanReadableFormat(timeSinceLastActivity)); } } - for (ApplicationConnectionState inactiveClient : inactiveApplications) { - close(inactiveClient); + List controllers; + synchronized (lock) { + controllers = new ArrayList<>(this.controllers); + } + + for (ControllerConnectionState controllerConnectionState : controllers) { + long timeSinceLastActivity = System.currentTimeMillis() - controllerConnectionState.getStream().getStreamStats().getPreviousPacketArrivalTime(); + log.info("State: " + controllerConnectionState + " time since last activity: " + humanReadableFormat(timeSinceLastActivity)); } } @@ -311,10 +357,6 @@ public class Backend implements Closeable { controllers.add(controllerConnectionState); controllersByKey.put(controllerConnectionState.getControllerKey(), controllerConnectionState); } - onRegister(controllerConnectionState); - } - - protected void onRegister(ControllerConnectionState controllerConnectionState) { } public void close(ControllerConnectionState inactiveClient) { @@ -328,7 +370,14 @@ public class Backend implements Closeable { @Override public void close() { + log.info("Closing..."); isClosed = true; + FileUtil.close(applicationConnector); + FileUtil.close(controllerConnector); + } + + public boolean isClosed() { + return isClosed; } public List getControllers() { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index 002af62898..7b8f914824 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -1,27 +1,23 @@ package com.rusefi.server; -import com.opensr5.Logger; -import com.rusefi.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; +import com.rusefi.tools.online.ProxyClient; -import java.net.MalformedURLException; +import java.io.IOException; public class BackendLauncher { - /** - * need this method to be not in Backend class for console to work without all backend classes - */ - public static void start(String[] args) throws MalformedURLException { + public static void main(String[] args) throws IOException { /* todo - rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_PROXY_PASSWORD")); + rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_KEYSTORE_PASSWORD")); */ UserDetailsResolver userDetailsFunction = new JsonUserDetailsResolver(); - Backend backend = new Backend(userDetailsFunction, HttpUtil.HTTP_PORT, Logger.CONSOLE); + Backend backend = new Backend(userDetailsFunction, HttpUtil.PROXY_JSON_API_HTTP_PORT); backend.runApplicationConnector(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, parameter -> { }); - backend.runControllerConnector(Backend.SERVER_PORT_FOR_CONTROLLERS, parameter -> { + backend.runControllerConnector(ProxyClient.SERVER_PORT_FOR_CONTROLLERS, parameter -> { }); - } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Birthday.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Birthday.java new file mode 100644 index 0000000000..bd64ff2c87 --- /dev/null +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Birthday.java @@ -0,0 +1,26 @@ +package com.rusefi.server; + +import org.jetbrains.annotations.NotNull; + +import java.time.Duration; + +public class Birthday { + private final long createAt = System.currentTimeMillis(); + + public String getDuration() { + return humanReadableFormat(System.currentTimeMillis() - createAt); + } + + @NotNull + static String humanReadableFormat(long millis) { + return humanReadableFormat(Duration.ofMillis(millis)); + } + + @NotNull + static String humanReadableFormat(Duration duration) { + return duration.toString() + .substring(2) + .replaceAll("(\\d[HMS])(?!$)", "$1 ") + .toLowerCase(); + } +} diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index ddf9ef5826..10628feca8 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -1,6 +1,6 @@ package com.rusefi.server; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.core.SensorsHolder; @@ -14,9 +14,11 @@ import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.net.Socket; +import static com.devexperts.logging.Logging.getLogging; + public class ControllerConnectionState { + private static final Logging log = getLogging(ControllerConnectionState.class); private final Socket clientSocket; - private final Logger logger; private final UserDetailsResolver userDetailsResolver; private boolean isClosed; @@ -34,19 +36,28 @@ public class ControllerConnectionState { private final TwoKindSemaphore twoKindSemaphore = new TwoKindSemaphore(); private final SensorsHolder sensorsHolder = new SensorsHolder(); + private final Birthday birthday = new Birthday(); + private int outputRoundAroundDuration; - public ControllerConnectionState(Socket clientSocket, Logger logger, UserDetailsResolver userDetailsResolver) { + public ControllerConnectionState(Socket clientSocket, UserDetailsResolver userDetailsResolver) { this.clientSocket = clientSocket; - this.logger = logger; this.userDetailsResolver = userDetailsResolver; try { - stream = new TcpIoStream("[controller] ", logger, clientSocket); + stream = new TcpIoStream("[backend-controller connector] ", clientSocket); incomingData = stream.getDataBuffer(); } catch (IOException e) { close(); } } + public Birthday getBirthday() { + return birthday; + } + + public int getOutputRoundAroundDuration() { + return outputRoundAroundDuration; + } + public IoStream getStream() { return stream; } @@ -64,22 +75,32 @@ public class ControllerConnectionState { FileUtil.close(clientSocket); } + @Override + public String toString() { + return "ControllerConnectionState{" + + "userDetails=" + userDetails + + ", controllerKey=" + controllerKey + + ", isClosed=" + isClosed + + ", twoKindSemaphore=" + twoKindSemaphore + + '}'; + } + public void requestControllerInfo() throws IOException { - HelloCommand.send(stream, logger); - String jsonString = HelloCommand.getHelloResponse(incomingData, logger); + HelloCommand.send(stream); + String jsonString = HelloCommand.getHelloResponse(incomingData); if (jsonString == null) return; sessionDetails = SessionDetails.valueOf(jsonString); if (!AutoTokenUtil.isToken(sessionDetails.getAuthToken())) throw new IOException("Invalid token in " + jsonString); - logger.info(sessionDetails.getAuthToken() + " New client: " + sessionDetails.getControllerInfo()); + log.info(sessionDetails.getAuthToken() + " New client: " + sessionDetails.getControllerInfo()); userDetails = userDetailsResolver.apply(sessionDetails.getAuthToken()); if (userDetails == null) { throw new IOException("Unable to resolve " + sessionDetails.getAuthToken()); } controllerKey = new ControllerKey(userDetails.getUserId(), sessionDetails.getControllerInfo()); - logger.info("User " + userDetails); + log.info("User " + userDetails); } public UserDetails getUserDetails() { @@ -92,10 +113,11 @@ public class ControllerConnectionState { public void getOutputs() throws IOException { byte[] commandPacket = GetOutputsCommand.createRequest(); + long start = System.currentTimeMillis(); + stream.sendPacket(commandPacket); - stream.sendPacket(commandPacket, logger); - - byte[] packet = incomingData.getPacket(logger, "msg", true); + byte[] packet = incomingData.getPacket("msg", true); + outputRoundAroundDuration = (int) (System.currentTimeMillis() - start); if (packet == null) throw new IOException("getOutputs: No response"); sensorsHolder.grabSensorValues(packet); @@ -116,6 +138,7 @@ public class ControllerConnectionState { getOutputs(); } catch (IOException e) { // todo: this is currently not covered by a unit test + log.error("grabOutputs " + this, e); backend.close(this); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java index dfbb893eb6..479f453cdb 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java @@ -1,7 +1,7 @@ package com.rusefi.server; +import com.devexperts.logging.Logging; import com.rusefi.tools.online.HttpUtil; -import org.apache.http.HttpResponse; import org.jetbrains.annotations.Nullable; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; @@ -9,17 +9,19 @@ import org.json.simple.parser.ParseException; import java.io.IOException; public class JsonUserDetailsResolver implements UserDetailsResolver { + private final static Logging log = Logging.getLogging(JsonUserDetailsResolver.class); + @Override @Nullable public UserDetails apply(String authToken) { try { - HttpResponse response = HttpUtil.executeGet(HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); - JSONObject json = HttpUtil.getJsonResponse(response); - System.out.println("String " + json); + String responseString = HttpUtil.executeGet(HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); + JSONObject json = HttpUtil.getJsonResponse(responseString); + log.info("String " + json); Object getUserByToken = json.get("getUserByToken"); if (getUserByToken instanceof String) { - System.out.println("AUTH FAILED: Result " + getUserByToken); + log.info("AUTH FAILED: Result " + getUserByToken); return null; } JSONObject details = (JSONObject) getUserByToken; @@ -27,10 +29,10 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { String name = (String) details.get("NAME"); UserDetails result = new UserDetails(name, Integer.parseInt(id)); - System.out.println("AUTH SUCCESS " + result); + log.info("AUTH SUCCESS " + result); return result; } catch (IOException | ParseException e) { - System.out.println("JsonUserDetailsResolver error" + e); + log.error("JsonUserDetailsResolver error" + e); e.printStackTrace(); return null; } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java index 97e646ef90..c19e30d3b9 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java @@ -1,5 +1,8 @@ package com.rusefi.server; +import com.devexperts.logging.Logging; +import com.rusefi.rusEFIVersion; +import com.rusefi.tools.online.ProxyClient; import org.takes.Take; import org.takes.facets.fork.FkRegex; import org.takes.rs.RsJson; @@ -9,16 +12,24 @@ import javax.json.JsonObjectBuilder; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; +import java.util.Date; + +import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; public class Monitoring { public static final String STATUS = "/status"; + private static final Logging log = Logging.getLogging(Monitoring.class); + private static final int PERIOD = 10 * SECOND; final FkRegex showStatistics; private final Backend backend; + private final Birthday birthday = new Birthday(); + public Monitoring(Backend backend) { this.backend = backend; - showStatistics = new FkRegex(STATUS, - (Take) req -> getStatus()); + showStatistics = new FkRegex(STATUS, (Take) req -> getStatus()); + startHeartbeatThread(); } private static String formatSize(long v) { @@ -27,6 +38,26 @@ public class Monitoring { return String.format("%.1f %sB", (double) v / (1L << (z * 10)), " KMGTPE".charAt(z)); } + public void startHeartbeatThread() { + new Thread(new Runnable() { + @Override + public void run() { + while (!backend.isClosed()) { + writeLogEntry(); + sleep(PERIOD); + } + } + }, "heartbeat").start(); + } + + private void writeLogEntry() { + OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); + log.info("cpu=" + operatingSystemMXBean.getSystemLoadAverage() + + ",free=" + Runtime.getRuntime().freeMemory() + + ",sessions=" + Backend.totalSessions.get() + + ",threads=" + Thread.getAllStackTraces().size()); + } + private RsJson getStatus() throws IOException { JsonObjectBuilder builder = Json.createObjectBuilder(); OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); @@ -39,6 +70,11 @@ public class Monitoring { builder.add("serverPortForControllers", backend.serverPortForControllers); builder.add("applicationsCount", backend.getApplicationsCount()); builder.add("controllersCount", backend.getControllersCount()); + builder.add("backend version", ProxyClient.BACKEND_VERSION); + builder.add("framework version", rusEFIVersion.CONSOLE_VERSION); + builder.add("compiled", new Date(rusEFIVersion.classBuildTimeMillis()).toString()); + builder.add("now", System.currentTimeMillis()); + builder.add(Backend.AGE, birthday.getDuration()); return new RsJson(builder.build()); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java index 20bc7b9052..38729ffc5e 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java @@ -1,16 +1,24 @@ package com.rusefi.server; +import com.devexperts.logging.Logging; + import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class TwoKindSemaphore { + private final static Logging log = Logging.getLogging(TwoKindSemaphore.class); + // we have to distinguish between long-term usage by application and short-term usage just to refresh gauges private final static int LONG_TERM = 2; private final static int SHORT_TERM = 1; private final Semaphore semaphore = new Semaphore(LONG_TERM); + private UserDetails owner; public void releaseFromLongTermUsage() { + log.info("release " + owner); semaphore.release(LONG_TERM); + // not atomic but that's fine, isUsed is the source of truth + owner = null; } public boolean acquireForShortTermUsage() { @@ -28,16 +36,33 @@ public class TwoKindSemaphore { /** * @return true if acquired successfully, false if not + * @param userDetails */ - public boolean acquireForLongTermUsage() { - return acquireForLongTermUsage(10); + public boolean acquireForLongTermUsage(UserDetails userDetails) { + return acquireForLongTermUsage(userDetails, 10); } - public boolean acquireForLongTermUsage(int timeout) { + public boolean acquireForLongTermUsage(UserDetails userDetails, int timeout) { try { - return semaphore.tryAcquire(LONG_TERM, timeout, TimeUnit.SECONDS); + boolean isAcquired = semaphore.tryAcquire(LONG_TERM, timeout, TimeUnit.SECONDS); + if (isAcquired) { + owner = userDetails; + } + return isAcquired; } catch (InterruptedException e) { throw new IllegalStateException(e); } } + + public UserDetails getOwner() { + return owner; + } + + @Override + public String toString() { + return "TwoKindSemaphore{" + + "semaphore=" + semaphore + + ", owner=" + owner + + '}'; + } } diff --git a/java_tools/proxy_server/src/main/resources/log4j2.xml b/java_tools/proxy_server/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..82ce630ca9 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/log4j2.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java_tools/proxy_server/src/main/resources/run_server.sh b/java_tools/proxy_server/src/main/resources/run_server.sh new file mode 100644 index 0000000000..3c0195eb51 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/run_server.sh @@ -0,0 +1 @@ +java -Xmx250M -jar rusefi_server.jar diff --git a/java_tools/proxy_server/src/main/resources/start_server.sh b/java_tools/proxy_server/src/main/resources/start_server.sh new file mode 100644 index 0000000000..e124d9ff84 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/start_server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir log +./run_server.sh > log/proxy.stdout 2>log/proxy.stderr & diff --git a/java_tools/proxy_server/src/main/resources/stop_server.sh b/java_tools/proxy_server/src/main/resources/stop_server.sh new file mode 100644 index 0000000000..7a521177e5 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/stop_server.sh @@ -0,0 +1,3 @@ +killall -9 java +TIMESTAMP=$(date "+%Y%m%d_%H%M%S") +mv log case_${TIMESTAMP} diff --git a/java_tools/proxy_server/src/main/resources/update_server.sh b/java_tools/proxy_server/src/main/resources/update_server.sh new file mode 100644 index 0000000000..986f5f32db --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/update_server.sh @@ -0,0 +1,10 @@ +#!/bin/sh +echo Stopping... +./stop_server.sh + +echo Downloading... +rm -rf rusefi_server.jar +wget https://rusefi.com/build_server/autoupdate/rusefi_server.jar + +echo Starting... +./start_server.sh diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/BirthdayTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/BirthdayTest.java new file mode 100644 index 0000000000..3ab8274acb --- /dev/null +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/BirthdayTest.java @@ -0,0 +1,16 @@ +package com.rusefi.server; + +import org.junit.Test; + +import static com.rusefi.Timeouts.MINUTE; +import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.server.Birthday.humanReadableFormat; +import static org.junit.Assert.assertEquals; + +public class BirthdayTest { + @Test + public void testDurationString() { + assertEquals("1s", humanReadableFormat(SECOND)); + assertEquals("1m", humanReadableFormat(MINUTE)); + } +} diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/ServerSandbox.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/ServerSandbox.java index e170408120..9327b2475d 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/ServerSandbox.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/ServerSandbox.java @@ -6,6 +6,7 @@ import org.takes.Take; import org.takes.facets.fork.FkRegex; import org.takes.facets.fork.TkFork; import org.takes.http.Exit; +import org.takes.http.Front; import org.takes.http.FtBasic; import org.takes.misc.Href; import org.takes.rq.RqHref; @@ -18,32 +19,30 @@ import javax.json.JsonObject; public class ServerSandbox { public static void main(final String... args) throws Exception { - new FtBasic( - new TkFork( - new FkRegex("/list", new Take() { - @Override - public Response act(Request request) throws Exception { - Href href = new RqHref.Base(request).href(); + Take fork = new TkFork( + new FkRegex("/list", new Take() { + @Override + public Response act(Request request) throws Exception { + Href href = new RqHref.Base(request).href(); // URI uri = href.uri(); - Iterable values = href.param("user"); - String name = values.iterator().next(); + Iterable values = href.param("user"); + String name = values.iterator().next(); - JsonArray result = Json.createArrayBuilder() - .add(Json.createObjectBuilder().add("name", name)) - .add(Json.createObjectBuilder().add("name", name)) - .build(); + JsonArray result = Json.createArrayBuilder() + .add(Json.createObjectBuilder().add("name", name)) + .add(Json.createObjectBuilder().add("name", name)) + .build(); - return new RsJson(result); + return new RsJson(result); - } - }), - new FkRegex("/", "hello, world!") - - - ), 8080 - ).start(Exit.NEVER); + } + }), + new FkRegex("/", "hello, world!") + ); + Front ftBasic = new FtBasic(fork, 8080); + ftBasic.start(Exit.NEVER); } diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java index 43247f691f..0149866e01 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java @@ -1,14 +1,15 @@ package com.rusefi.server; +import com.rusefi.TestHelper; import org.junit.Test; import static org.junit.Assert.assertEquals; public class SessionDetailsTest { + @Test public void testSerialization() { - ControllerInfo ci = new ControllerInfo("name", "make", "code", "sign"); - SessionDetails sd = new SessionDetails(ci, "auth", 123); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); String json = sd.toJson(); SessionDetails fromJson = SessionDetails.valueOf(json); @@ -17,9 +18,8 @@ public class SessionDetailsTest { @Test public void testApplicationRequest() { - ControllerInfo ci = new ControllerInfo("name", "make", "code", "sign"); - SessionDetails sd = new SessionDetails(ci, "auth", 123); - ApplicationRequest ar = new ApplicationRequest(sd, 321); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); + ApplicationRequest ar = new ApplicationRequest(sd, new UserDetails("", 321)); String json = ar.toJson(); ApplicationRequest fromJson = ApplicationRequest.valueOf(json); diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java index 05e884f9b2..48e80b7034 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java @@ -2,8 +2,7 @@ package com.rusefi.server; import org.junit.Test; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class TwoKindSemaphoreTest { @Test @@ -15,11 +14,20 @@ public class TwoKindSemaphoreTest { assertFalse(twoKindSemaphore.isUsed()); twoKindSemaphore.releaseFromShortTermUsage(); + assertNull(twoKindSemaphore.getOwner()); - assertTrue(twoKindSemaphore.acquireForLongTermUsage()); + UserDetails userDetails = new UserDetails("xxx", 222); + + + assertTrue(twoKindSemaphore.acquireForLongTermUsage(userDetails)); + assertNotNull(twoKindSemaphore.getOwner()); assertTrue(twoKindSemaphore.isUsed()); // - assertFalse(twoKindSemaphore.acquireForLongTermUsage(1)); + assertFalse(twoKindSemaphore.acquireForLongTermUsage(userDetails, 1)); assertFalse(twoKindSemaphore.acquireForShortTermUsage()); + + + twoKindSemaphore.releaseFromLongTermUsage(); + assertNull(twoKindSemaphore.getOwner()); } } diff --git a/java_tools/ts_plugin/build.xml b/java_tools/ts_plugin/build.xml index bfc068788e..dc66c4b1fe 100644 --- a/java_tools/ts_plugin/build.xml +++ b/java_tools/ts_plugin/build.xml @@ -13,7 +13,7 @@ diff --git a/java_console/shared_io/src/main/java/com/rusefi/SignatureHelper.java b/java_tools/ts_plugin/src/main/java/com/rusefi/SignatureHelper.java similarity index 100% rename from java_console/shared_io/src/main/java/com/rusefi/SignatureHelper.java rename to java_tools/ts_plugin/src/main/java/com/rusefi/SignatureHelper.java diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java index e7e52ea0ea..bce97a6c7e 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java @@ -1,9 +1,85 @@ package com.rusefi.ts_plugin; -import javax.swing.*; +import com.rusefi.auth.AutoTokenUtil; +import com.rusefi.autodetect.PortDetector; +import com.rusefi.autoupdate.AutoupdateUtil; +import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; +import com.rusefi.ui.AuthTokenPanel; +import com.rusefi.ui.util.URLLabel; +import org.putgemin.VerticalFlowLayout; +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * @see PluginEntry + */ public class BroadcastTab { - private final JComponent content = new JPanel(); + private final JComponent content = new JPanel(new VerticalFlowLayout()); + + private final JLabel status = new JLabel(); + private final JButton disconnect = new JButton("Disconnect"); + private NetworkConnector networkConnector; + + public BroadcastTab() { + JButton broadcast = new JButton("Broadcast"); + disconnect.setEnabled(false); + + broadcast.addActionListener(e -> { + String authToken = AuthTokenPanel.getAuthToken(); + if (!AutoTokenUtil.isToken(authToken)) { + status.setText("Auth token is required to broadcast ECU"); + return; + } + + new Thread(() -> { + String autoDetectedPort = PortDetector.autoDetectSerial(null); + SwingUtilities.invokeLater(() -> { + startBroadcasting(authToken, autoDetectedPort); + }); + + }).start(); + }); + + disconnect.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + networkConnector.close(); + disconnect.setEnabled(false); + } + }); + + content.add(broadcast); + content.add(status); + content.add(disconnect); + content.add(new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING)); + content.add(new JLabel(PluginEntry.LOGO)); + + AutoupdateUtil.trueLayout(content); + } + + private void startBroadcasting(String authToken, String autoDetectedPort) { + if (autoDetectedPort == null) { + status.setText("rusEFI ECU not detected.
Please make sure that TunerStudio is currently not connected to ECU."); + } else { + status.setText("rusEFI detected at " + autoDetectedPort); + disconnect.setEnabled(true); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext(); + + new Thread(() -> { + networkConnector = new NetworkConnector(); + + NetworkConnector.NetworkConnectorResult networkConnectorResult = networkConnector.start(authToken, autoDetectedPort, connectorContext); + + SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken())); + + }).start(); + } + AutoupdateUtil.trueLayout(content); + } public JComponent getContent() { return content; diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/IntegerDocumentFilter.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/IntegerDocumentFilter.java new file mode 100644 index 0000000000..bcb030f65b --- /dev/null +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/IntegerDocumentFilter.java @@ -0,0 +1,69 @@ +package com.rusefi.ts_plugin; + +import javax.swing.*; +import javax.swing.text.*; + +public class IntegerDocumentFilter extends DocumentFilter { + public static void install(JTextField jTextField) { + PlainDocument doc = (PlainDocument) jTextField.getDocument(); + doc.setDocumentFilter(new IntegerDocumentFilter()); + } + + @Override + public void insertString(FilterBypass fb, int offset, String string, + AttributeSet attr) throws BadLocationException { + + Document doc = fb.getDocument(); + StringBuilder sb = new StringBuilder(); + sb.append(doc.getText(0, doc.getLength())); + sb.insert(offset, string); + + if (test(sb.toString())) { + super.insertString(fb, offset, string, attr); + } else { + // warn the user and don't allow the insert + } + } + + private boolean test(String text) { + try { + Integer.parseInt(text); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String text, + AttributeSet attrs) throws BadLocationException { + + Document doc = fb.getDocument(); + StringBuilder sb = new StringBuilder(); + sb.append(doc.getText(0, doc.getLength())); + sb.replace(offset, offset + length, text); + + if (test(sb.toString())) { + super.replace(fb, offset, length, text, attrs); + } else { + // warn the user and don't allow the insert + } + + } + + @Override + public void remove(FilterBypass fb, int offset, int length) + throws BadLocationException { + Document doc = fb.getDocument(); + StringBuilder sb = new StringBuilder(); + sb.append(doc.getText(0, doc.getLength())); + sb.delete(offset, offset + length); + + if (test(sb.toString())) { + super.remove(fb, offset, length); + } else { + // warn the user and don't allow the insert + } + + } +} diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java index c002038a25..f96efc3498 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java @@ -1,21 +1,32 @@ package com.rusefi.ts_plugin; import com.efiAnalytics.plugin.ecu.ControllerAccess; +import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.ts_plugin.util.ManifestHelper; import com.rusefi.tune.xml.Constant; import javax.swing.*; +import java.awt.*; +import java.lang.reflect.Field; import java.util.function.Supplier; /** - * TsPlugin launcher creates an instance of this class via reflection. + * {@link TsPluginLauncher} creates an instance of this class via reflection. + * @see UploadTab upload tune & TODO upload logs + * @see RemoteTab remote ECU access & control + * @see BroadcastTab offer your ECU for remove access & control + * @see PluginBodySandbox */ public class PluginEntry implements TsPluginBody { - private final JTabbedPane tabbedPane = new JTabbedPane(); + private final JPanel content = new JPanel(new BorderLayout()); + + static final ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); + /** * the real constructor - this one is invoked via reflection */ + @SuppressWarnings("unused") public PluginEntry() { this(ControllerAccess::getInstance); } @@ -23,13 +34,32 @@ public class PluginEntry implements TsPluginBody { public PluginEntry(Supplier controllerAccessSupplier) { System.out.println("PluginEntry init " + this); + if (isLauncherTooOld()) { + content.add(new JLabel("Please manually install latest plugin version")); + return; + } + UploadTab uploadTab = new UploadTab(controllerAccessSupplier); BroadcastTab broadcastTab = new BroadcastTab(); RemoteTab remoteTab = new RemoteTab(); + JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("Upload", uploadTab.getContent()); tabbedPane.addTab("Broadcast", broadcastTab.getContent()); tabbedPane.addTab("Remote ECU", remoteTab.getContent()); + content.add(tabbedPane); + } + + private boolean isLauncherTooOld() { + try { + // at some point we did not have this field so using reflection for the next couple of months + Field field = TsPluginLauncher.class.getField("BUILD_VERSION"); + int launcherVersion = (int) field.get(null); + System.out.println("Launcher version " + launcherVersion + " detected"); + return false; + } catch (NoSuchFieldException | IllegalAccessException e) { + return true; + } } public static boolean isEmpty(Constant constant) { @@ -44,7 +74,7 @@ public class PluginEntry implements TsPluginBody { @Override public JComponent getContent() { - return tabbedPane; + return content; } /* public void close() { diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 99ff85f18d..c5a1d57eb4 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -1,13 +1,20 @@ package com.rusefi.ts_plugin; -import com.rusefi.LocalApplicationProxy; import com.rusefi.NamedThreadFactory; import com.rusefi.SignatureHelper; import com.rusefi.autoupdate.AutoupdateUtil; +import com.rusefi.io.tcp.ServerSocketReference; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.proxy.client.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; +import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; +import com.rusefi.server.SessionDetails; +import com.rusefi.server.UserDetails; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import com.rusefi.tools.online.PublicSession; +import com.rusefi.ui.AuthTokenPanel; import com.rusefi.ui.util.URLLabel; import org.putgemin.VerticalFlowLayout; @@ -17,18 +24,33 @@ import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicReference; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; /** - * see RemoteTabSandbox + * remote ECU access & control + * + * @see RemoteTabSandbox + * @see PluginEntry */ public class RemoteTab { private static final String APPLICATION_PORT = "application_port"; + public static final String HOWTO_REMOTE_TUNING = "https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning"; private final JComponent content = new JPanel(new BorderLayout()); private final JPanel list = new JPanel(new VerticalFlowLayout()); - private final JTextField oneTimePasswordControl = new JTextField(); + private final JTextField oneTimePasswordControl = new JTextField("0") { + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + // todo: dynamic calculation of desired with based on String width? + return new Dimension(100, size.height); + } + }; + + + private final JButton disconnect = new JButton("Disconnect"); private final Executor listDownloadExecutor = Executors.newSingleThreadExecutor(new NamedThreadFactory("online list downloader")); @@ -36,10 +58,30 @@ public class RemoteTab { JButton refresh = new JButton("Refresh List"); refresh.addActionListener(e -> requestListDownload()); - JTextField applicationPort = new JTextField(); - String portProperty = getConfig().getRoot().getProperty(APPLICATION_PORT, Integer.toString(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS)); + disconnect.addActionListener(e -> { + LocalApplicationProxy localApplicationProxy = RemoteTabController.INSTANCE.getLocalApplicationProxy(); + if (localApplicationProxy != null) + localApplicationProxy.close(); + RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); + requestListDownload(); + }); + + + JTextField applicationPort = new JTextField() { + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + // todo: dynamic calculation of desired with based on String width? + return new Dimension(100, size.height); + } + }; + IntegerDocumentFilter.install(applicationPort); + IntegerDocumentFilter.install(oneTimePasswordControl); + String portProperty = getLocalPort(); applicationPort.setText(portProperty); + JPanel topLines = new JPanel(new VerticalFlowLayout()); + JPanel topPanel = new JPanel(new FlowLayout()); topPanel.add(refresh); @@ -47,56 +89,151 @@ public class RemoteTab { topPanel.add(applicationPort); topPanel.add(new JLabel(" One time password:")); topPanel.add(oneTimePasswordControl); - content.add(topPanel, BorderLayout.NORTH); + + topLines.add(topPanel); + topLines.add(new URLLabel(HOWTO_REMOTE_TUNING)); + + content.add(topLines, BorderLayout.NORTH); content.add(list, BorderLayout.CENTER); - requestListDownload(); + list.add(new JLabel("Requesting list of ECUs")); + + LocalApplicationProxy currentState = RemoteTabController.INSTANCE.getLocalApplicationProxy(); + if (currentState == null) { + requestListDownload(); + } else { + setConnectedStatus(currentState.getApplicationRequest().getTargetUser()); + } + } + + private String getLocalPort() { + return getConfig().getRoot().getProperty(APPLICATION_PORT, "29001"); } private void requestListDownload() { - listDownloadExecutor.execute(new Runnable() { - @Override - public void run() { - List userDetails; - try { - userDetails = ProxyClient.getOnlineApplications(HttpUtil.HTTP_PORT); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - showList(userDetails); - } - }); - } catch (IOException e) { - e.printStackTrace(); - return; - } - System.out.println(userDetails); - + listDownloadExecutor.execute(() -> { + List userDetails; + try { + userDetails = ProxyClient.getOnlineApplications(HttpUtil.PROXY_JSON_API_HTTP_PORT); + SwingUtilities.invokeLater(() -> showList(userDetails)); + } catch (IOException e) { + e.printStackTrace(); + return; } }); } private void showList(List userDetails) { + if (RemoteTabController.INSTANCE.getState() != RemoteTabController.State.NOT_CONNECTED) + return; list.removeAll(); - for (PublicSession user : userDetails) { - list.add(createPanel(user)); + if (userDetails.isEmpty()) { + list.add(new JLabel("No ECUs are broadcasting at the moment :(")); + } else { + + JPanel verticalPanel = new JPanel(new VerticalFlowLayout()); + JScrollPane scroll = new JScrollPane(verticalPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + list.add(scroll); + + for (PublicSession user : userDetails) { + verticalPanel.add(createSessionControl(user)); + } } AutoupdateUtil.trueLayout(list); } - private JComponent createPanel(PublicSession publicSession) { - JComponent userPanel = new JPanel(new FlowLayout()); - userPanel.add(new JLabel(publicSession.getUserDetails().getUserName())); + private JComponent createSessionControl(PublicSession publicSession) { + JComponent topLine = new JPanel(new FlowLayout()); + topLine.add(new JLabel(publicSession.getUserDetails().getUserName())); ControllerInfo controllerInfo = publicSession.getControllerInfo(); - userPanel.add(new JLabel(controllerInfo.getVehicleName() + " " + controllerInfo.getEngineMake() + " " + controllerInfo.getEngineCode())); + topLine.add(new JLabel(controllerInfo.getVehicleName() + " " + controllerInfo.getEngineMake() + " " + controllerInfo.getEngineCode())); - userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature()))); + JPanel bottomPanel = new JPanel(new FlowLayout()); + if (publicSession.isUsed()) { + bottomPanel.add(new JLabel(" Used by " + publicSession.getOwnerName())); + } else { + JButton connect = new JButton("Connect to " + publicSession.getUserDetails().getUserName()); + connect.addActionListener(event -> connecToToProxy(publicSession, controllerInfo)); + bottomPanel.add(connect); + } - userPanel.add(new JButton("Connect")); + JPanel userPanel = new JPanel(new BorderLayout()); + + userPanel.add(topLine, BorderLayout.NORTH); + userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature())), BorderLayout.CENTER); + userPanel.add(bottomPanel, BorderLayout.SOUTH); + + userPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); return userPanel; } + private void connecToToProxy(PublicSession publicSession, ControllerInfo controllerInfo) { + RemoteTabController.INSTANCE.setState(RemoteTabController.State.CONNECTING); + setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); + + LocalApplicationProxy.ConnectionListener connectionListener = localApplicationProxy -> { + RemoteTabController.INSTANCE.setConnected(localApplicationProxy); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + setConnectedStatus(publicSession.getUserDetails()); + } + }); + }; + + new Thread(() -> { + runAuthenticator(publicSession, controllerInfo, connectionListener); + }, "Authenticator").start(); + } + + private void setConnectedStatus(UserDetails userDetails) { + setStatus("Connected to " + userDetails.getUserName(), + new JLabel("You can now connect your TunerStudio to IP address localhost and port " + getLocalPort()), + disconnect); + } + + private void setStatus(String text, JComponent... extra) { + list.removeAll(); + list.add(new JLabel(text)); + for (JComponent component : extra) + list.add(component); + AutoupdateUtil.trueLayout(list); + } + + private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo, LocalApplicationProxy.ConnectionListener connectionListener) { + SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), + Integer.parseInt(oneTimePasswordControl.getText())); + + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails()); + + try { + AtomicReference serverHolderAtomicReference = new AtomicReference<>(); + + TcpIoStream.DisconnectListener disconnectListener = message -> SwingUtilities.invokeLater(() -> { + setStatus("Disconnected"); + RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); + ServerSocketReference serverHolder = serverHolderAtomicReference.get(); + if (serverHolder != null) + serverHolder.close(); + }); + + LocalApplicationProxyContextImpl context = new LocalApplicationProxyContextImpl() { + @Override + public int authenticatorPort() { + return Integer.parseInt(getLocalPort()); + } + }; + ServerSocketReference serverHolder = LocalApplicationProxy.startAndRun( + context, + applicationRequest, + HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener, connectionListener); + serverHolderAtomicReference.set(serverHolder); + } catch (IOException e) { + setStatus("IO error: " + e); + } + } + public JComponent getContent() { return content; } diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java new file mode 100644 index 0000000000..cd89ea684d --- /dev/null +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java @@ -0,0 +1,37 @@ +package com.rusefi.ts_plugin; + +import com.rusefi.proxy.client.LocalApplicationProxy; + +public enum RemoteTabController { + /** + * TunerStudio likes to close plugin panel, we need a singleton to preserve the state + */ + INSTANCE; + + private State state = State.NOT_CONNECTED; + private LocalApplicationProxy localApplicationProxy; + + public synchronized void setState(State state) { + this.state = state; + localApplicationProxy = null; + } + + public synchronized State getState() { + return state; + } + + public synchronized void setConnected(LocalApplicationProxy localApplicationProxy) { + setState(State.CONNECTED); + this.localApplicationProxy = localApplicationProxy; + } + + public LocalApplicationProxy getLocalApplicationProxy() { + return localApplicationProxy; + } + + public enum State { + NOT_CONNECTED, + CONNECTING, + CONNECTED + } +} diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java index 9862103691..6b36fa6f75 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java @@ -142,8 +142,7 @@ public class UploadTab { content.add(uploadView.getContent()); content.add(upload); - ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); - content.add(new JLabel(LOGO)); + content.add(new JLabel(PluginEntry.LOGO)); content.add(tokenPanel.getContent()); content.add(new URLLabel(REO_URL)); diff --git a/java_console/shared_io/src/test/java/com/rusefi/SignatureHelperTest.java b/java_tools/ts_plugin/src/test/java/com/rusefi/SignatureHelperTest.java similarity index 100% rename from java_console/shared_io/src/test/java/com/rusefi/SignatureHelperTest.java rename to java_tools/ts_plugin/src/test/java/com/rusefi/SignatureHelperTest.java diff --git a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java index aa8dc15c1b..c7fdacc9be 100644 --- a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java +++ b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java @@ -14,7 +14,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** - * @see PluginLauncherSandbox + * Sandbox for plugin body + * + * @see PluginLauncherSandbox for plugin auto-update launcher */ public class PluginBodySandbox { diff --git a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java index f2f8ee4b61..12facbfd40 100644 --- a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java +++ b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java @@ -2,6 +2,9 @@ package com.rusefi.ts_plugin; import com.rusefi.ui.util.FrameHelper; +/** + * @see PluginBodySandbox + */ public class RemoteTabSandbox { public static void main(String[] args) { new FrameHelper().showFrame(new RemoteTab().getContent()); diff --git a/java_tools/ts_plugin_launcher/.idea/libraries/jsr305_2_0_1.xml b/java_tools/ts_plugin_launcher/.idea/libraries/jsr305_2_0_1.xml new file mode 100644 index 0000000000..873943546b --- /dev/null +++ b/java_tools/ts_plugin_launcher/.idea/libraries/jsr305_2_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml similarity index 56% rename from java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml rename to java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml index 3ba1ad72a9..891fffaba3 100644 --- a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml +++ b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml @@ -1,8 +1,8 @@ - + \ No newline at end of file diff --git a/misc/jenkins/setup/jobs/integration_and_primary_bundle/config.xml b/misc/jenkins/setup/jobs/integration_and_primary_bundle/config.xml index d79ac53b03..f1b0b97393 100644 --- a/misc/jenkins/setup/jobs/integration_and_primary_bundle/config.xml +++ b/misc/jenkins/setup/jobs/integration_and_primary_bundle/config.xml @@ -17,12 +17,12 @@ 2 - https://github.com/chuckwagoncomputing/rusefi + https://github.com/rusefi/rusefi - */testing-primary + */master false @@ -81,4 +81,4 @@ - + \ No newline at end of file diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index a62a9ce011..e0ef38c70b 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -83,6 +83,10 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callb // this is needed to have valid CLT and IAT. //todo: reuse initPeriodicEvents(PASS_ENGINE_PARAMETER_SIGNATURE) method engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); + + // Setup running in mock airmass mode + engineConfiguration->fuelAlgorithm = LM_MOCK; + engine->mockAirmassModel = &mockAirmass; } EngineTestHelper::~EngineTestHelper() { @@ -315,7 +319,6 @@ void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e inject eth->clearQueue(); - ASSERT_EQ(LM_PLAIN_MAF, engineConfiguration->fuelAlgorithm); engineConfiguration->isIgnitionEnabled = false; // let's focus on injection engineConfiguration->specs.cylindersCount = 4; // a bit of flexibility - the mode may be changed by some tests diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 9431eb10ac..8f92b36d4f 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -13,6 +13,7 @@ #include "main_trigger_callback.h" #include "unit_test_framework.h" #include "sensor.h" +#include "mocks.h" extern EnginePins enginePins; @@ -83,6 +84,8 @@ public: Engine engine; persistent_config_s persistentConfig; + ::testing::NiceMock mockAirmass; + private: void writeEvents(const char *fileName); }; diff --git a/unit_tests/mocks.h b/unit_tests/mocks.h index 2a093f05f1..fb60970c94 100644 --- a/unit_tests/mocks.h +++ b/unit_tests/mocks.h @@ -1,7 +1,10 @@ +#pragma once + #include "electronic_throttle.h" #include "dc_motor.h" #include "table_helper.h" #include "pwm_generator_logic.h" +#include "airmass.h" #include "gmock/gmock.h" @@ -10,7 +13,7 @@ public: // IEtbController mocks MOCK_METHOD(void, reset, (), ()); MOCK_METHOD(void, start, (), (override)); - MOCK_METHOD(void, init, (DcMotor* motor, int ownIndex, pid_s* pidParameters, const ValueProvider3D* pedalMap), (override)); + MOCK_METHOD(void, init, (SensorType positionSensor, DcMotor* motor, int ownIndex, pid_s* pidParameters, const ValueProvider3D* pedalMap), (override)); MOCK_METHOD(void, setIdlePosition, (percent_t pos), (override)); MOCK_METHOD(void, autoCalibrateTps, (), (override)); @@ -52,3 +55,12 @@ public: MOCK_METHOD(void, scheduleByTimestampNt, (scheduling_s *scheduling, efitime_t timeUs, action_s action), (override)); MOCK_METHOD(void, scheduleForLater, (scheduling_s *scheduling, int delayUs, action_s action), (override)); }; + +class MockAirmass : public AirmassModelBase { +public: + MockAirmass() : AirmassModelBase(veTable) {} + + MockVp3d veTable; + + MOCK_METHOD(AirmassResult, getAirmass, (int rpm), (override)); +}; diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index e2ece5d105..6f4639963b 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -31,6 +31,9 @@ TEST(fuelControl, transitionIssue1592) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð, IM_SEQUENTIAL); + EXPECT_CALL(eth.mockAirmass, getAirmass(400)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + // This is easiest to trip on a wheel that requires sync engineConfiguration->trigger.customTotalToothCount = 6; engineConfiguration->trigger.customSkippedToothCount = 1; @@ -38,10 +41,6 @@ TEST(fuelControl, transitionIssue1592) { engineConfiguration->ambiguousOperationMode = FOUR_STROKE_CAM_SENSOR; engineConfiguration->isFasterEngineSpinUpEnabled = true; - engineConfiguration->fuelAlgorithm = LM_ALPHA_N; - - extern fuel_Map3D_t fuelMap; - fuelMap.setAll(13); extern fuel_Map3D_t fuelPhaseMap; fuelPhaseMap.setAll(0); setArrayValues(config->crankingFuelCoef, 1.0f); diff --git a/unit_tests/tests/ignition_injection/test_fuelCut.cpp b/unit_tests/tests/ignition_injection/test_fuelCut.cpp index 21c7f6f540..47396bcdd7 100644 --- a/unit_tests/tests/ignition_injection/test_fuelCut.cpp +++ b/unit_tests/tests/ignition_injection/test_fuelCut.cpp @@ -11,8 +11,12 @@ #include "sensor.h" #include "fsio_impl.h" +using ::testing::_; + TEST(fuelCut, coasting) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); // configure coastingFuelCut engineConfiguration->coastingFuelCutEnabled = true; diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index a78a39c327..44525c3c6d 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -10,6 +10,7 @@ #include "dc_motor.h" #include "engine_controller.h" #include "sensor.h" +#include "idle_thread.h" #include "mocks.h" @@ -32,7 +33,6 @@ TEST(etb, initializationNoPedal) { } TEST(etb, initializationSingleThrottle) { - StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); @@ -45,8 +45,8 @@ TEST(etb, initializationSingleThrottle) { Sensor::setMockValue(SensorType::AcceleratorPedal, 0); Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 0); - // Expect mock0 to be init with index 0, and PID params - EXPECT_CALL(mocks[0], init(_, 0, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock0 to be init with TPS 1, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps1, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); @@ -71,23 +71,54 @@ TEST(etb, initializationDualThrottle) { // The presence of a second TPS indicates dual throttle Sensor::setMockValue(SensorType::Tps2, 25.0f); - // Expect mock0 to be init with index 0, and PID params - EXPECT_CALL(mocks[0], init(_, 0, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock0 to be init with TPS 1, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps1, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); - // Expect mock1 to be init with index 2, and PID params - EXPECT_CALL(mocks[1], init(_, 1, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock1 to be init with TPS 2, index 1, and PID params + EXPECT_CALL(mocks[1], init(SensorType::Tps2, _, 1, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[1], reset); EXPECT_CALL(mocks[1], start); doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); } +TEST(etb, initializationDcMotorIdleValveMode) { + StrictMock mocks[ETB_COUNT]; + + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // Enable VW idle mode + engineConfiguration->dcMotorIdleValve = true; + + for (int i = 0; i < ETB_COUNT; i++) { + engine->etbControllers[i] = &mocks[i]; + EXPECT_CALL(mocks[i], setIdlePosition(33.0f)); + } + + // No accelerator pedal configured - this mode doesn't use it + + // Expect mock0 to be init with TPS 2, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr))); + EXPECT_CALL(mocks[0], reset); + EXPECT_CALL(mocks[0], start); + + // We do not expect throttle #2 to be initialized + + doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); + + + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); +} + TEST(etb, idlePlumbing) { StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + engineConfiguration->useETBforIdleControl = true; + + Sensor::setMockValue(SensorType::AcceleratorPedal, 50.0f); for (int i = 0; i < ETB_COUNT; i++) { engine->etbControllers[i] = &mocks[i]; @@ -95,7 +126,7 @@ TEST(etb, idlePlumbing) { EXPECT_CALL(mocks[i], setIdlePosition(33.0f)); } - setEtbIdlePosition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); } TEST(etb, testSetpointOnlyPedal) { @@ -117,7 +148,7 @@ TEST(etb, testSetpointOnlyPedal) { // Uninitialized ETB must return unexpected (and not deference a null pointer) EXPECT_EQ(etb.getSetpoint(), unexpected); - etb.init(nullptr, 0, nullptr, &pedalMap); + etb.init(SensorType::Invalid, nullptr, 0, nullptr, &pedalMap); // Check endpoints and midpoint Sensor::setMockValue(SensorType::AcceleratorPedal, 0.0f); @@ -167,7 +198,7 @@ TEST(etb, setpointIdle) { .WillRepeatedly([](float xRpm, float y) { return y; }); - etb.init(nullptr, 0, nullptr, &pedalMap); + etb.init(SensorType::Invalid, nullptr, 0, nullptr, &pedalMap); // No idle range, should just pass pedal Sensor::setMockValue(SensorType::AcceleratorPedal, 0.0f); @@ -204,6 +235,29 @@ TEST(etb, setpointIdle) { EXPECT_FLOAT_EQ(55, etb.getSetpoint().value_or(-1)); } +TEST(etb, idleVolkswagenMode) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // In this mode the idle position should be passed thru as the setpoint directly + engineConfiguration->dcMotorIdleValve = true; + + EtbController etb; + INJECT_ENGINE_REFERENCE(&etb); + + etb.setIdlePosition(0); + EXPECT_FLOAT_EQ(0, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(50); + EXPECT_FLOAT_EQ(50, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(100); + EXPECT_FLOAT_EQ(100, etb.getSetpoint().value_or(-1)); + + // Out of range should be clamped + etb.setIdlePosition(-10); + EXPECT_FLOAT_EQ(0, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(110); + EXPECT_FLOAT_EQ(100, etb.getSetpoint().value_or(-1)); +} + TEST(etb, etbTpsSensor) { // Throw some distinct values on the TPS sensors so we can identify that we're getting the correct one Sensor::setMockValue(SensorType::Tps1, 25.0f); @@ -212,14 +266,14 @@ TEST(etb, etbTpsSensor) { // Test first throttle { EtbController etb; - etb.init(nullptr, 0, nullptr, nullptr); + etb.init(SensorType::Tps1, nullptr, 0, nullptr, nullptr); EXPECT_EQ(etb.observePlant().Value, 25.0f); } // Test second throttle { EtbController etb; - etb.init(nullptr, 1, nullptr, nullptr); + etb.init(SensorType::Tps2, nullptr, 1, nullptr, nullptr); EXPECT_EQ(etb.observePlant().Value, 75.0f); } } @@ -231,7 +285,7 @@ TEST(etb, setOutputInvalid) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be disabled in case of unexpected EXPECT_CALL(motor, disable()); @@ -245,7 +299,7 @@ TEST(etb, setOutputValid) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -261,7 +315,7 @@ TEST(etb, setOutputValid2) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -277,7 +331,7 @@ TEST(etb, setOutputOutOfRangeHigh) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -293,7 +347,7 @@ TEST(etb, setOutputOutOfRangeLow) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -309,7 +363,7 @@ TEST(etb, setOutputPauseControl) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Pause control - should get no output engineConfiguration->pauseEtbControl = true; @@ -327,7 +381,7 @@ TEST(etb, closedLoopPid) { pid.minValue = -60; EtbController etb; - etb.init(nullptr, 0, &pid, nullptr); + etb.init(SensorType::Invalid, nullptr, 0, &pid, nullptr); // Disable autotune for now Engine e; diff --git a/unit_tests/tests/test_fuel_map.cpp b/unit_tests/tests/test_fuel_map.cpp index 8d4d53c938..14dbbcb386 100644 --- a/unit_tests/tests/test_fuel_map.cpp +++ b/unit_tests/tests/test_fuel_map.cpp @@ -14,27 +14,14 @@ #include "efi_gpio.h" #include "advance_map.h" #include "sensor.h" +#include "mocks.h" -TEST(misc, testMafFuelMath) { - WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); - extern fuel_Map3D_t veMap; - veMap.setAll(75); - - engineConfiguration->fuelAlgorithm = LM_REAL_MAF; - engineConfiguration->injector.flow = 200; - - setAfrMap(config->afrTable, 13); - - auto airmass = getRealMafAirmass(200, 6000 PASS_ENGINE_PARAMETER_SUFFIX); - - // Check results - EXPECT_NEAR(0.277777f * 0.75f, airmass.CylinderAirmass, EPS4D); - EXPECT_NEAR(70.9814f, airmass.EngineLoadPercent, EPS4D); -} +using ::testing::FloatNear; TEST(misc, testFuelMap) { printf("Setting up FORD_ASPIRE_1996\r\n"); WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); + engineConfiguration->fuelAlgorithm = LM_PLAIN_MAF; printf("Filling fuel map\r\n"); for (int k = 0; k < FUEL_LOAD_COUNT; k++) { diff --git a/unit_tests/tests/test_fuel_math.cpp b/unit_tests/tests/test_fuel_math.cpp index 9278203044..b95084e603 100644 --- a/unit_tests/tests/test_fuel_math.cpp +++ b/unit_tests/tests/test_fuel_math.cpp @@ -1,8 +1,14 @@ #include "engine_test_helper.h" #include "fuel_math.h" +#include "alphan_airmass.h" +#include "maf_airmass.h" +#include "mocks.h" #include "gtest/gtest.h" +using ::testing::StrictMock; +using ::testing::FloatNear; + TEST(FuelMath, getStandardAirCharge) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); @@ -29,3 +35,66 @@ TEST(FuelMath, getStandardAirCharge) { EXPECT_FLOAT_EQ(4.782959f, getStandardAirCharge(PASS_ENGINE_PARAMETER_SIGNATURE)); } + +TEST(AirmassModes, AlphaNNormal) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + // 4 cylinder 4 liter = easy math + engineConfiguration->specs.displacement = 4.0f; + engineConfiguration->specs.cylindersCount = 4; + + StrictMock veTable; + + EXPECT_CALL(veTable, getValue(1200, FloatNear(0.71f, EPS4D))) + .WillOnce(Return(35.0f)); + + AlphaNAirmass dut(veTable); + INJECT_ENGINE_REFERENCE(&dut); + + Sensor::setMockValue(SensorType::Tps1, 0.71f); + + // Mass of 1 liter of air * VE + float expectedAirmass = 1.2047f * 0.35f; + + auto result = dut.getAirmass(1200); + EXPECT_NEAR(result.CylinderAirmass, expectedAirmass, EPS4D); + EXPECT_NEAR(result.EngineLoadPercent, 0.71f, EPS4D); +} + +TEST(AirmassModes, AlphaNFailedTps) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // Shouldn't get called + StrictMock veTable; + + AlphaNAirmass dut(veTable); + INJECT_ENGINE_REFERENCE(&dut); + + // explicitly reset the sensor + Sensor::resetMockValue(SensorType::Tps1); + // Ensure that it's actually failed + ASSERT_FALSE(Sensor::get(SensorType::Tps1).Valid); + + auto result = dut.getAirmass(1200); + EXPECT_EQ(result.CylinderAirmass, 0); +} + +TEST(misc, MafNormal) { + WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); + engineConfiguration->fuelAlgorithm = LM_REAL_MAF; + engineConfiguration->injector.flow = 200; + setAfrMap(config->afrTable, 13); + + MockVp3d veTable; + // Ensure that the correct cell is read from the VE table + EXPECT_CALL(veTable, getValue(6000, FloatNear(70.9814f, EPS4D))) + .WillOnce(Return(75.0f)); + + MafAirmass dut(veTable); + INJECT_ENGINE_REFERENCE(&dut); + + auto airmass = dut.getAirmassImpl(200, 6000); + + // Check results + EXPECT_NEAR(0.277777f * 0.75f, airmass.CylinderAirmass, EPS4D); + EXPECT_NEAR(70.9814f, airmass.EngineLoadPercent, EPS4D); +} diff --git a/unit_tests/tests/trigger/test_injection_scheduling.cpp b/unit_tests/tests/trigger/test_injection_scheduling.cpp index 071338461b..759d4ca2b7 100644 --- a/unit_tests/tests/trigger/test_injection_scheduling.cpp +++ b/unit_tests/tests/trigger/test_injection_scheduling.cpp @@ -17,6 +17,7 @@ TEST(injectionScheduling, NormalDutyCycle) { efitick_t nowNt = 1000000; InjectionEvent event; + INJECT_ENGINE_REFERENCE(&event); InjectorOutputPin pin; pin.injectorIndex = 0; event.outputs[0] = &pin; @@ -36,5 +37,5 @@ TEST(injectionScheduling, NormalDutyCycle) { engine->rpmCalculator.oneDegreeUs = 100; - handleFuelInjectionEvent(0, &event, 1000, nowNt PASS_ENGINE_PARAMETER_SUFFIX); + event.onTriggerTooth(0, 1000, nowNt); } diff --git a/unit_tests/tests/trigger/test_trigger_decoder.cpp b/unit_tests/tests/trigger/test_trigger_decoder.cpp index 58d33dcfe5..5aa73cccec 100644 --- a/unit_tests/tests/trigger/test_trigger_decoder.cpp +++ b/unit_tests/tests/trigger/test_trigger_decoder.cpp @@ -23,6 +23,8 @@ #include "trigger_universal.h" #include "sensor.h" +using ::testing::_; + extern WarningCodeState unitTestWarningCodeState; extern bool printTriggerDebug; extern float actualSynchGap; @@ -295,9 +297,10 @@ static void assertREqualsM(const char *msg, void *expected, void *actual) { extern bool_t debugSignalExecutor; TEST(misc, testRpmCalculator) { - printf("*************************************************** testRpmCalculator\r\n"); - WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + IgnitionEventList *ilist = &engine->ignitionEvents; ASSERT_EQ( 0, ilist->isReady) << "size #1"; @@ -588,6 +591,8 @@ static void assertInjectionEventBatch(const char *msg, InjectionEvent *ev, int i } static void setTestBug299(EngineTestHelper *eth) { + // TODO: switch to mock airmass + eth->persistentConfig.engineConfiguration.fuelAlgorithm = LM_PLAIN_MAF; setupSimpleTestEngineWithMafAndTT_ONE_trigger(eth); Engine *engine = ð->engine; EXPAND_Engine @@ -977,6 +982,8 @@ TEST(big, testFuelSchedulerBug299smallAndMedium) { TEST(big, testTwoWireBatch) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); engineConfiguration->injectionMode = IM_BATCH; engineConfiguration->twoWireBatchInjection = true; @@ -1002,6 +1009,9 @@ TEST(big, testTwoWireBatch) { TEST(big, testSequential) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); engineConfiguration->injectionMode = IM_SEQUENTIAL;